软件编程
位置:首页>> 软件编程>> java编程>> java实现文件下载的两种方式

java实现文件下载的两种方式

作者:pangqiandou  发布时间:2023-11-11 06:37:14 

标签:java,文件下载

本文实例为大家分享了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();
 }

来源:http://blog.csdn.net/pangqiandou/article/details/53234586

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com