Java spring下载excel文件

Java spring下载excel文件,java,spring,rest,api,swagger-2.0,Java,Spring,Rest,Api,Swagger 2.0,我有以下控制器下载excel文件。该文件已下载,但当我打开它时,我得到“该文件已损坏,无法打开。”。我的控制器出了什么问题 @ApiOperation(value = "export ontology") @RequestMapping(value = "/export/{ontologyId}", method = RequestMethod.GET) public ResponseEntity<InputStreamResource> exportExcel(@PathVaria

我有以下控制器下载excel文件。该文件已下载,但当我打开它时,我得到“该文件已损坏,无法打开。”。我的控制器出了什么问题

@ApiOperation(value = "export ontology")
@RequestMapping(value = "/export/{ontologyId}", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> exportExcel(@PathVariable Long ontologyId) throws FileNotFoundException {

    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Description", "File Transfer");
    headers.add("Content-Disposition", "attachment; filename=pfizer_polish_ontology.xlsx");
    headers.add("Content-Transfer-Encoding", "binary");
    headers.add("Connection", "Keep-Alive");
    headers.setContentType(
            MediaType.parseMediaType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));

    File file = new File("C:\\ttt\\pfizer_polish_ontology.xlsx");

    InputStreamResource isr = new InputStreamResource(new FileInputStream(file));
    return ResponseEntity.ok().contentLength(file.length()).headers(headers).body(isr);
}
@ApiOperation(value=“导出本体”)
@RequestMapping(value=“/export/{ontologyId}”,method=RequestMethod.GET)
public ResponseEntity exportExcel(@PathVariable Long ontologyId)引发FileNotFoundException{
HttpHeaders=新的HttpHeaders();
添加(“内容描述”、“文件传输”);
headers.add(“内容处置”、“附件;文件名=pfizer_polish_ontology.xlsx”);
添加(“内容传输编码”、“二进制”);
添加(“连接”、“保持活动”);
headers.setContentType(
parseMediaType(“application/vnd.openxmlformats of icedocument.spreadsheetml.sheet”);
File File=新文件(“C:\\ttt\\pfizer\u polish\u ontology.xlsx”);
InputStreamResource isr=新的InputStreamResource(新文件InputStream(文件));
返回ResponseEntity.ok().contentLength(file.length()).headers(headers).body(isr);
}
我想添加一个重要的细节 我正在使用Swagger接口来实现RESTAPI


使用邮递员(保存和下载)我能够下载文件,这很好。因此,问题似乎只有在使用swagger界面时才会出现。我打赌您的内容类型与Excel格式不匹配。以下内容就足够了:

contentType("application/csv")
不管怎样,我建议你看看描述雪莉的网页。就我所见,xsl(x)格式将与以下所有格式最匹配:

application/excel
application/vnd.ms-excel
application/x-excel
application/x-msexcel

这是我在xlsx文档中使用的:

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

我刚刚在我的第一篇文章中用你建议的contentType更新了代码,但并没有像我们那样从
HttpServletResponse
获取
OutputStream
并将其写入这个输出流。查看修改后的代码。在这里我可以看到“修改后的代码”。你出版了吗?到底是什么不起作用?您必须指定您的问题并描述错误。当尝试打开下载的文件“该文件已损坏且无法打开”时,我会遇到相同的错误。该文件已下载,但已被破坏一个简单且可能愚蠢的观察结果。。。文件C:\\ttt\\pfizer\u polish\u ontology.xlsx是否正常?是否有可能该文件已损坏,因此下载的文件已损坏?该文件100%可用。我刚刚从主位置打开了它,没有任何问题。我刚刚尝试了你的代码,一切都正常工作,在Firefox(54.0.1)和Chrome(60.0.3112.113)中都是如此。希望您的问题得到解决。是的,代码工作正常。这是一个招摇过市的问题。使用postman API,你能解决这个问题吗?