文档上载
Java文件下载的几种方式
public
HttpServletResponse download(String path, HttpServletResponse response) {
try
{
//
path是指欲下载的文件的路径。
File file
=
new
File(path);
//
取得文件名。
String filename
=
file.getName();
//
取得文件的后缀名。
String ext
=
filename.substring(filename.lastIndexOf(
"
.
"
)
+
1
).toUpperCase();
//
以流的形式下载文件。
InputStream fis
=
new
BufferedInputStream(
new
FileInputStream(path));
byte
[] buffer
=
new
byte
[fis.available()];
fis.read(buffer);
fis.close();
//
清空response
response.reset();
//
设置response的Header
response.addHeader(
"
Content-Disposition
"
,
"
attachment;filename=
"
+
new
String(filename.getBytes()));
response.addHeader(
"
Content-Length
"
,
""
+
file.length());
OutputStream toClient
=
new
BufferedOutputStream(response.getOutputStream());
response.setContentType(
"
application/octet-stream
"
);
toClient.write(buffer);
toClient.flush();
toClient.close();
}
catch
(IOException ex) {
ex.printStackTrace();
}
return
response;
}
public
void
downloadLocal(HttpServletResponse response)
throws
FileNotFoundException {
//
下载本地文件
String fileName
=
"
Operator.doc
"
.toString();
//
文件的默认保存名
//
读到流中
InputStream inStream
=
new
FileInputStream(
"
c:/Operator.doc
"
);
//
文件的存放路径
//
设置输出的格式
response.reset();
response.setContentType(
"
bin
"
);
response.addHeader(
"
Content-Disposition
"
,
"
attachment; filename=\
""
+ fileName +
"
\
""
);
//
循环取出流中的数据
byte
[] b
=
new
byte
[
100
];
int
len;
try
{
while
((len
=
inStream.read(b))
>
0
)
response.getOutputStream().write(b,
0
, len);
inStream.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
public
void
downloadNet(HttpServletResponse response)
throws
MalformedURLException {
//
下载网络文件
int
bytesum
=
0
;
int
byteread
=
0
;
URL url
=
new
URL(
"
windine.blogdriver.com/logo.gif
"
);
try
{
URLConnection conn
=
url.openConnection();
InputStream inStream
=
conn.getInputStream();
FileOutputStream fs
=
new
FileOutputStream(
"
c:/abc.gif
"
);
byte
[] buffer
=
new
byte
[
1204
];
int
length;
while
((byteread
=
inStream.read(buffer))
!=
-
1
) {
bytesum
+=
byteread;
System.out.println(bytesum);
fs.write(buffer,
0
, byteread);
}
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
}
File f = new File(filePath);
if ( ! f.exists()) {
response.sendError( 404 , " File not found! " );
return ;
}
BufferedInputStream br = new BufferedInputStream( new FileInputStream(f));
byte [] buf = new byte [ 1024 ];
int len = 0 ;
response.reset(); // 非常重要
if (isOnLine) { // 在线打开方式
URL u = new URL( " file:/// " + filePath);
response.setContentType(u.openConnection().getContentType());
response.setHeader( " Content-Disposition " , " inline; filename= " + f.getName());
// 文件名应该编码成UTF-8
} else { // 纯下载方式
response.setContentType( " application/x-msdownload " );
response.setHeader( " Content-Disposition " , " attachment; filename= " + f.getName());
}
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0 )
out.write(buf, 0 , len);
br.close();
out.close();
}