2017-09-04 169 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