文件下载错误仅在带有逗号的文件名中

Ajm*_*sha 4 java spring-boot java-stream

在我的文件下载 API 案例中,出现这样的错误。

org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:380)
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:420)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:345)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:405)
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:393)
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)
    at org.springframework.util.StreamUtils.copy(StreamUtils.java:128)
    at org.springframework.util.FileCopyUtils.copy(FileCopyUtils.java:109)
    at 
Run Code Online (Sandbox Code Playgroud)

我注意到该错误仅在尝试下载名称包含逗号 (,) 的文件时发生,否则它可以正常工作。

在我的 API 中,我设置了这样的响应:

response.setContentType("application/octet-stream");
response.setHeader(Constants.CONTENT_DISPOSITION, "attachment; filename= " + fileSeedName);
                        System.out.println(file.exists());
                        FileCopyUtils.copy(new BufferedInputStream(new FileInputStream(file)), response.getOutputStream());
response.flushBuffer();
Run Code Online (Sandbox Code Playgroud)

谁能帮帮我吗。

小智 11

文件名需要双引号才能工作

header('Content-Disposition:attachment;filename="' . $fileName . '.pdf"');
Run Code Online (Sandbox Code Playgroud)

  • 这是实际的修复。 (3认同)

小智 8

将文件路径包裹在“双引号”中


Ajm*_*sha 8

这是特定于 Google Chrome 的已知问题,特别与 Content-Disposition 标头相关。根据大量参考资料(仅 Google \xe2\x80\x9cChrome content-disposition comma\xe2\x80\x9d),这是由于 chrome 无法正确处理逗号转义而 Firefox、IE 等可以正确处理逗号转义而造成的。 。根据一些网站的说法,这是最近才引入的,谷歌不打算修复它。

\n\n

参考链接

\n