Java文件下载

本文介绍了使用Java实现文件下载的不同方式,包括本地文件下载、网络文件下载及支持在线打开文件的方法。详细展示了通过Servlet响应流来处理文件下载的技术细节。

Java文件下载的几种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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();
         }
     }

//支持在线打开文件的一种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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();
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值