2013-01-09 103 views
1

我正在從控制器下載文件。這是行不通的。這是因爲文件名中的「,」。如果我從名稱中刪除「,」將起作用。有沒有解決這個問題。我應該做String.replace(「,」「」)。一定會有更好的辦法?下載文件時的文件名「」,「

response.setHeader("Content-Disposition", "inline; filename=" + "abbbbababbaababba.4.1.2013,aakdfhfdf.xlsx"); 

Complete方法

@RequestMapping(value = "/newsimage/{newsImageId} ", method = RequestMethod.GET) 
public void getImage(HttpServletRequest request, HttpServletResponse response, @PathVariable long newsImageId) { 

    NewsImage newsImage = newsImageService.findById(newsImageId); 
    String fileName = newsImage.getFileName(); 
     response.setHeader("Content-Disposition", "inline; filename=" + "abbbbababbaababba.4.1.2013,aakdfhfdf.xlsx"); 
    response.setContentType(newsImage.getContentType()); 
    // response.setHeader("Content-Disposition", "attachment;filename=" + newsImage.getFileName()); 

    OutputStream out; 
    try { 
     out = response.getOutputStream(); 
     out.write(newsImage.getData()); 
     out.flush(); 
    } catch (IOException e) { 
     logger.error(e.getMessage()); 
    } 

} 
+2

另請參閱:http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http –

回答

6

你需要引用的文件名,否則它解釋爲標題屬性的一部分。

response.setHeader("Content-Disposition", 
    "inline; filename=\"" + "abbbbababbaababba.4.1.2013,aakdfhfdf.xlsx" + "\""); 
2

reserved characters and words但','不是其中之一。我仍然不會使用','(用' - '替代)。另外,'。'不應該用於除後綴以外的其他任何內容。

如果你確實想用','你應該引用整個文件名,而不是因爲操作系統(或文件系統)的限制,而是因爲HTTP頭。