2017-09-04 173 views
2

我有以下控制器下载Excel文件。该文件被下载,但当我打开它时,我得到“该文件已损坏,无法打开。”我在控制器中做错了什么?春天下载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); 
} 

我想也许添加一个重要的细节 我使用扬鞭接口休息的API

使用邮差(保存和下载),我是能够下载文件,它是很好的。所以,看来问题只能用招摇接口

+0

简单,也许愚蠢的观察。 ..是文件C:\\ ttt \\ pfizer_polish_ontology.xlsx好吗?这个文件可能是损坏的,所以下载的文件被破坏? –

+0

该文件适用于100%。我刚打开它从主力位置没有问题 –

+0

只是想你的代码,一切按预期工作,无论是在火狐(54.0.1)和Chrome(60.0.3112.113)。希望你的问题解决了。 – lzagkaretos

回答

1

当我敢打赌,你的内容类型不匹配的Excel格式。在跟随着应该足够:

contentType("application/csv") 

无论如何,我建议你采取描述shirtly的MIME Types的网页看看。据我看到的格式XSL(X)将匹配最重要的是这些:

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

没有人以上,我 –

+0

不起作用究竟不起作用?你必须指定你的问题并描述错误。 –

+0

我得到了同样的错误时尝试打开下载文件“的文件已损坏,无法打开。”文件下载,但它的腐败 –

1

这是我用于XLSX文件之一:

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
+0

不为我工作 –

+0

我刚刚更新的代码在我最初的职位与你的建议的contentType - 并不起作用 –

+0

我们做的方式,它是由'HttpServletResponse'得到'OutputStream'并将其写入此输出流。查看修改后的代码。 – Prashant