[英]Download large file through spring mvc controller
我有一種控制器方法,一旦用戶單擊“下載”按鈕,該方法便開始下載文件。 對象列表最多可以包含40萬個對象。當我將csv文件放入少量對象時,它可以正常工作。
@RequestMapping(value = "/downloadCSV") public void downloadCSV(HttpServletResponse response) throws IOException { response.setContentType("text/csv"); String reportName = "metrics.csv"; response.setHeader("Content-disposition", "attachment;filename="+reportName); ArrayList<String> rows = new ArrayList<String>(); rows.add("A, B, C, D, E"); rows.add("\\n"); for (int i = 0; i < someList.size(); i++) { String row = metricsDownloadModelList.get(i).getContentId() + someList.get(i).getA() + ", " + someList.get(i).getB() + ", " + someList.get(i).getC() + ", " + someList.get(i).getD() + ", " + someList.get(i).getE() + "\\n"; rows.add(row); } Iterator<String> iter = rows.iterator(); while (iter.hasNext()) { String outputString = (String) iter.next(); response.getOutputStream().print(outputString); } response.getOutputStream().flush(); }
但是,當我將列表中的對象數增加到1000或更多時,它就可以了。 給我一個錯誤:
執行控制器時發生錯誤{org.apache.coyote.http11.HeadersTooLargeException:試圖將更多數據寫入響應標頭,而緩沖區中沒有可用空間。 增加連接器上的maxHttpHeaderSize或將較少的數據寫入響應標頭。
是否可以在不修改servlet配置文件的情況下解決問題? 還有其他方法可以解決此問題嗎?
為了下載文件,我將執行以下操作:
為了做到這一點,我將編寫這種控制器:
@RequestMapping(method = { RequestMethod.GET }, value = { "/downloadCsv" })
public ResponseEntity<InputStreamResource> downloadCSV()
{
try
{
String fileName = "test.csv";
//Create here your CSV file
File theCsv = new File(fileName);
HttpHeaders respHeaders = new HttpHeaders();
MediaType mediaType = new MediaType("text","csv");
respHeaders.setContentType(mediaType);
respHeaders.setContentDispositionFormData("attachment", fileName);
InputStreamResource isr = new InputStreamResource(new FileInputStream(theCsv));
return new ResponseEntity<InputStreamResource>(isr, respHeaders, HttpStatus.OK);
}
catch (Exception e)
{
String messagge = "Error in CSV creation; "+e.getMessage();
logger.error(messagge, e);
return new ResponseEntity<InputStreamResource>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
通過使用這種控制器,我能夠下載非常大的文件
安傑洛
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.