当前位置: 代码迷 >> Web前端 >> 文档上载
  详细解决方案

文档上载

热度:435   发布时间:2012-09-08 10:48:07.0
文档下载

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();
????????}
????}

//支持在线打开文件的一种方式
???? public ? void ?downLoad(String?filePath,?HttpServletResponse?response,? boolean ?isOnLine)? throws ?Exception?{
????????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();
????}
  相关解决方案