java - REST 服务发送损坏的文件

标签 java spring-mvc

我正在尝试创建一个 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/

相关文章:

java - JAXB 注释被忽略(@XmlAccessorType(XmlAccessType.NONE) 和@XmlTransient

java - Java 扫描仪出现问题,在 while 循环中打印

java - 使用 java.util.Scanner 解析基本类型

java - 编写 Controller 的正确方法

javascript - Spring MVC中当满足另一个变量的条件时如何从一个jsp重定向到另一个jsp

java - OAuth2 spring 示例闪光和色调

java - 如何防止 Android Studio 自动完成删除相邻标记

java - 使用 Cloud Tools for Eclipse 部署包含 p12 文件的 App Engine 应用程序

spring-mvc - Extjs 4 MVC - App.JS 找到我的 Controller 的相对路径问题 - 在带有 Spring MVC 的 WEB-INF 下

java - 找到了多个名为 [spring_web] 的片段。这对于相对顺序是不合法的