gpt4 book ai didi

java - 通过 Java 在 Chrome 中下载没有 .zip 扩展名的 Zip 文件

转载 作者:行者123 更新时间:2023-12-01 09:26:47 25 4
gpt4 key购买 nike

  1. 我正在尝试从服务器中的固定位置下载 zip 文件。
  2. 在我的 Rest 方法中,我只是传递来自客户端(浏览器)的文件名。(请参阅下面的代码)。
  3. 在我的 Rest 方法中,我将 zip 文件发送给客户端。

  4. 文件可以毫无问题地下载到浏览器上。

我的问题是在浏览器上下载的 zip 文件没有 .zip 扩展名。

@RequestMapping(value = "/zip/{filePath}", method = RequestMethod.GET)
public @ResponseBody void downloadZip(@PathVariable("filePath") String filePath, HttpServletRequest request, HttpServletResponse response) throws IOException {

ServletContext context = request.getServletContext();
File downloadFile = new File(filePath);
FileInputStream inputStream = new FileInputStream(downloadFile);
// get output stream of the response
OutputStream outStream = response.getOutputStream();

byte[] buffer = new byte[(int) downloadFile.length()];
int bytesRead = -1;

// write bytes read from the input stream into the output stream
while ((bytesRead = inputStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
// get MIME type of the file
String mimeType = context.getMimeType(fullPath);
if (mimeType == null) {
// set to binary type if MIME mapping not found
mimeType = "application/octet-stream";
}
System.out.println("MIME type: " + mimeType);

// set content attributes for the response
response.setContentType(mimeType);
response.setContentLength((int) downloadFile.length());

response.setHeader("Content-Disposition",
String.format("attachment; filename=\"%s\"", downloadFile.getName()));
logger.error("Filename = " + downloadFile.getName());
inputStream.close();
outStream.close();
}

PS:该文件会在某些带有 ZIP 的计算机上下载,而在某些没有 ZIP 的计算机上下载。我只在 Chrome 上进行了测试(根据客户要求)。我认为 Chrome 设置存在问题,我需要检查一下(只是猜测)。

有人可以帮忙吗?

提前致谢......

最佳答案

更改设置响应 header 和将文件推送到输出流之间的顺序 - 毕竟, header 需要先离开。

[已编辑]

  1. “为什么在启动时设置 HttpServletResponse 会影响代码。”
    嗯,很简单:客户端应该通过解释 HTTP 响应 header 来接收如何处理有效负载的指令。如果在开始时没有设置这些 header ,那么在传输结束时发送这些 header 就为时已晚。这假设 HttpServletResponse 在使用 setHeader 调用时实际上会发送这些 header ,这是一个很大的假设 - 我怀疑这些 header 实际上不会在调用 response 之后发送。 .getOutputStream - 响应不太可能缓冲整个有效负载以等待调用者指定这些 header 。

关于java - 通过 Java 在 Chrome 中下载没有 .zip 扩展名的 Zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39769078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com