Java下载文件的几种方式

  • 2019 年 10 月 4 日
  • 筆記

以流的方式下载

public HttpServletResponse download(String path, HttpServletResponse response) {          try {              // path是指欲下载的文件的路径。              File file = new File(path);              // 取得文件名。              String filename = file.getName();              // 取得文件的后缀名。              String ext = filename.substring(filename.lastIndexOf(".") + ).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[];          int len;          try {              while ((len = inStream.read(b)) > )                  response.getOutputStream().write(b, , len);              inStream.close();          } catch (IOException e) {              e.printStackTrace();          }      }  

下载网络文件

public void downloadNet(HttpServletResponse response) throws MalformedURLException {          // 下载网络文件          int bytesum = ;          int byteread = ;            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[];              int length;              while ((byteread = inStream.read(buffer)) != -1) {                  bytesum += byteread;                  System.out.println(bytesum);                  fs.write(buffer, , 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(, "File not found!");              return;          }          BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));          byte[] buf = new byte[];          int len = ;            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)) > )              out.write(buf, , len);          br.close();          out.close();      }