Java 我们是否需要在服务器端添加设置,以便在浏览器中下载文件可以提供挂起和恢复的便利?

Java 我们是否需要在服务器端添加设置,以便在浏览器中下载文件可以提供挂起和恢复的便利?,java,file,servlets,download,Java,File,Servlets,Download,我制作了一个url,用户可以通过它下载zip文件。我想知道是否需要在服务器端添加某种设置,以便下载zip的客户端能够支持挂起和恢复 它是用java实现的: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // reads input file from an absolute path Strin

我制作了一个url,用户可以通过它下载zip文件。我想知道是否需要在服务器端添加某种设置,以便下载zip的客户端能够支持挂起和恢复

它是用java实现的:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // reads input file from an absolute path

  String filePath = "path to my zip file";

  File downloadFile = new File(filePath);
  FileInputStream inStream = new FileInputStream(downloadFile);

  // if you want to use a relative path to context root:
  String relativePath = getServletContext().getRealPath("");
  System.out.println("relativePath = " + relativePath);

  // obtains ServletContext
  ServletContext context = getServletContext();

  // gets MIME type of the file
  String mimeType = context.getMimeType(filePath);
  if (mimeType == null) {        
      // set to binary type if MIME mapping not found
      mimeType = "application/octet-stream";
  }
  System.out.println("MIME type: " + mimeType);

  // modifies response
  response.setContentType(mimeType);
  response.setContentLength((int) downloadFile.length());

  // forces download
  String headerKey = "Content-Disposition";
  String headerValue = String.format("attachment; filename=\"%s\"", downloadFile.getName());
  response.setHeader(headerKey, headerValue);

  // obtains response's output stream
  OutputStream outStream = response.getOutputStream();

  byte[] buffer = new byte[4096];
  int bytesRead = -1;

  while ((bytesRead = inStream.read(buffer)) != -1) {
      outStream.write(buffer, 0, bytesRead);
  }

  inStream.close();
  outStream.close();   
}

如果要支持挂起和恢复,则需要添加对部分GET的支持,也就是对范围或范围标头的支持

RFC2616(第14.35节)详细说明了如何处理范围请求。

Tomcat的默认servlet有一个实现,如果您愿意,可以将其用作起点。

应用程序服务器对此具有内置支持。只需通过服务器配置公开该文件即可。您不清楚使用的是哪台服务器,但如果是Tomcat,则需要将包含文件的文件夹放在Tomcat的
/webapps
文件夹中,如下所示:

apachetomcat

|--垃圾箱
|--形态
|--解放党
|--日志
|--临时工
|--网络应用
|`--文件
|“有点
|--工作
:
或者,如果无法移动文件夹,则将其作为另一个
添加到Tomcat的
/conf/server.xml
,如下所示:


无论哪种方式,您的文件都可以通过HTTP URL直接访问,而无需使用servlet

http://localhost:8080/files/some.zip
如果您仍然坚持在家中开发一个支持HTTP范围请求的servlet,那么您可能会发现这很有帮助