Java 我们是否需要在服务器端添加设置,以便在浏览器中下载文件可以提供挂起和恢复的便利?
我制作了一个url,用户可以通过它下载zip文件。我想知道是否需要在服务器端添加某种设置,以便下载zip的客户端能够支持挂起和恢复 它是用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
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,那么您可能会发现这很有帮助