使用 Spring 下载 PDF 文件会导致文件损坏



>我在Spring中实现了一个控制器,它将内容写入pdf文件(通过输入流(到ServletOutputStream,但是在比较现有文件和下载文件的内容时,它似乎已损坏。

public class DownloadFileController {
@GetMapping(value = "v0/file")
@ResponseBody
public void downloadFile(HttpServletResponse response) {
try (ServletOutputStream outputStream = response.getOutputStream();
InputStream inputStream = getFile()) {
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="example.pdf"");
IOUtils.copy(inputStream, outputStream);
} catch (IOException ex) {
throw ...
}
}
private static InputStream getFile() {
return DownloadFileController.class.getResourceAsStream("/example.pdf");
}
}

HTTP 请求成功并使用 PDF 的内容进行响应,但它的文字为:

编辑:文件并不总是PDF,也可以是图像,word文档等。

更改

response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);

response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_PDF);

将内容类型设置为application/pdf下载.pdf文件

可以使用此setContentType()方法设置内容类型,并使用类中的addHeader()方法在响应标头中设置内容处置HttpServletResponse方法。

例如:

response.setContentType("application/pdf");
response.addHeader("Content-Disposition", "attachment; filename=example.pdf");

事实证明,是我是个白痴,并将二进制响应解释为导致未知字符的文本。

最新更新