我正在尝试创建一个 java REST 服务来下载 Word 文档。文件已下载,但内容只是垃圾十六进制,而不是实际的 Word 文档内容。我的示例代码如下。我缺少什么?之前和之后的文件具有相同的字节数。
@SuppressWarnings("resource")
@RequestMapping(value = "get/testdoc", method=RequestMethod.GET, produces="application/octet-stream)
public @ResponseBody ResponseEntity<byte[]> getTestDoc() throws Throwable{
File doc = new File("C:\\temp\\file.doc");
InputStream is = new FileInputStream(doc);
byte[] bytes = IOUtils.toByteArray(is);
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
responseHeaders.set("Content-Disposition" , "Attachment; filename=file.doc");
responseHeaders.setContentLength(ProposalDoc.length());
return new ResponseEntity<byte[]>(bytes, responseHeaders, HttpStatus.OK);
}
最佳答案
我认为有两个问题:
<强>1。标题长度:
我认为至少有一行非常奇怪的行:
responseHeaders.setContentLength(ProposalDoc.length());
我想,应该是:
responseHeaders.setContentLength(bytes.length);
<强>2。 @ResponseBody
注释
如果您使用返回类型ResponseEntity<byte[]>
,那么您不得添加 @ResponseBody
.
@RequestMapping(value = "get/testdoc", method=RequestMethod.GET)
public ResponseEntity<byte[]> getTestDoc() throws Throwable{
...
}
关于java - REST 服务发送损坏的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34052553/