java - jsp+springMVC實(shí)現(xiàn)文件下載的時(shí)候后臺(tái)拋出getOutputStream()異常
問(wèn)題描述
使用JSP+springMVC框架做的web平臺(tái),在做文件下載的時(shí)候,遇到這樣的問(wèn)題:
文件下載部分的代碼是這樣寫的:
@RequestMapping('/ModelDownload{id}')public String ModelDownLoad(@PathVariable int id, HttpServletResponse response){ String fileName = 'download.txt'; String filePath = 'D:'; String modelName = new ModelService().getModelById(id).getModelName(); System.out.println(modelName); response.reset(); response.setContentType('application/x-download'); response.addHeader('Content-Disposition', 'attachment;filename='+fileName);//重新設(shè)置響應(yīng)頭文件字段,設(shè)置下載文件的文件名 OutputStream OutputStream = null; FileInputStream fileInputStream = null; try {OutputStream = response.getOutputStream();fileInputStream = new FileInputStream(filePath+fileName);byte[] buffer = new byte[1024*10];//設(shè)置文件大小上限為10Mfor (int read; (read = fileInputStream.read(buffer)) != -1;){ OutputStream.write(buffer,0,read);} } catch (IOException e) {// TODO Auto-generated catch blockSystem.out.println(e.toString()); } finally{try { fileInputStream.close(); OutputStream.close();} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();} } return 'success';}
百度了很多,幾乎都是說(shuō)在JSP上使用out對(duì)象進(jìn)行clear()和close()操作的,根本沒(méi)有針對(duì)后臺(tái)操作遇到的相同問(wèn)題的解決方案,求大神指導(dǎo)。
問(wèn)題解答
回答1:問(wèn)題解決:把方法的返回類型改為void即可,猜測(cè)問(wèn)題的原因可能是當(dāng)返回類型為String的時(shí)候,點(diǎn)擊下載按鈕,彈出下載頁(yè)面,這時(shí)候后臺(tái)代碼被中斷,沒(méi)有就行close();
相關(guān)文章:
1. python - Django有哪些成功項(xiàng)目?2. 實(shí)現(xiàn)bing搜索工具urlAPI提交3. Python從URL中提取域名4. MySQL主鍵沖突時(shí)的更新操作和替換操作在功能上有什么差別(如圖)5. 關(guān)于mysql聯(lián)合查詢一對(duì)多的顯示結(jié)果問(wèn)題6. 數(shù)據(jù)庫(kù) - Mysql的存儲(chǔ)過(guò)程真的是個(gè)坑!求助下面的存儲(chǔ)過(guò)程哪里錯(cuò)啦,實(shí)在是找不到哪里的問(wèn)題了。7. node.js - 微信小程序websocket連接問(wèn)題8. 直接打字符不可以嗎?>和>有區(qū)別嗎9. node.js - windows10下的npm全局路徑的復(fù)原或者將npm徹底刪除?10. Python中使用超長(zhǎng)的List導(dǎo)致內(nèi)存占用過(guò)大
