我在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文档等。
答案 0 :(得分:0)
更改
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
到
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_PDF);
答案 1 :(得分:0)
将内容类型设置为 application/pdf
以下载.pdf文件。
您可以使用setContentType()
类中的addHeader()
方法,使用此HttpServletResponse
方法设置内容类型并在响应标头中设置 Content-Disposition
例如:
response.setContentType("application/pdf");
response.addHeader("Content-Disposition", "attachment; filename=example.pdf");
答案 2 :(得分:0)
结果是我是个白痴,将二进制响应解释为导致未知字符的文本。