我有一個相對簡單的 Java/Tomcat 需求,但我不知道如何實作它。
我有一個到特定服務器 URL 的 HTTPS POST 請求,稱之為/myserver/somecontroller.do.
控制器方法正確回傳一個 MIME 型別為application/vnd.ms-excel.
這一切正常。問題是回應會以名稱somecontroller.do而不是 Excel 能夠理解的名稱下載到客戶端計算機上,例如myspreadsheet.xls.
因此,當用戶單擊檔案以打開它時,他們會收到一條丑陋的錯誤訊息,而不是他們期望的電子表格,并且我在收件箱中收到了一張故障單。
他們可以重命名檔案,但最佳解決方案是讓系統正確命名檔案。
如何修改 HTTPServletResponse 引數,以便它理解它正在發送一個名為myspreadsheet.xls而不是 的檔案somecontroller.do?
一些清理過的示例代碼:
// Returns a spreadsheet, but it's called "somethingelse.do" instead of
// "somethingelse.xls"
@RequestMapping(value="/something/somthingelse.do", method=RequestMethod.POST)
public String doSomething(@ModelAttribute ReportModel reportModel, BindingResult bindResult,HttpServletResponse response,Model model) throws Exception{
Workbook reportObj = ReportService.generateExcel(ReportService.getReportData(reportModel.getReportParameters()));
response.setContentType("application/vnd.ms-excel");
OutputStream out = response.getOutputStream();
HSSFWorkbook workbook = (HSSFWorkbook) reportObj;
workbook.write(out);
out.flush();
return SomeViewMapping.VIEW_SOMETHING.getViewName();
}
uj5u.com熱心網友回復:
你還需要一個標題。就像是:
response.setHeader("Content-Disposition", "attachment; filename=myspreadsheet.xls");
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316739.html
