java - jsp+springMVC實現(xiàn)文件下載的時候后臺拋出getOutputStream()異常
問題描述
使用JSP+springMVC框架做的web平臺,在做文件下載的時候,遇到這樣的問題:
文件下載部分的代碼是這樣寫的:
@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';}
百度了很多,幾乎都是說在JSP上使用out對象進行clear()和close()操作的,根本沒有針對后臺操作遇到的相同問題的解決方案,求大神指導(dǎo)。
問題解答
回答1:問題解決:把方法的返回類型改為void即可,猜測問題的原因可能是當返回類型為String的時候,點擊下載按鈕,彈出下載頁面,這時候后臺代碼被中斷,沒有就行close();
相關(guān)文章:
1. Python處理Dict生成json2. macOS Sierra 10.12 安裝mysql 5.7.1出現(xiàn)錯誤3. 網(wǎng)頁爬蟲 - python爬蟲用BeautifulSoup爬取<s>元素并寫入字典,但某些div下沒有這一元素,導(dǎo)致自動寫入下一條,如何解決?4. php - 生產(chǎn)環(huán)境下,給MySQL添加索引,修改表結(jié)構(gòu)操作,如何才能讓線上業(yè)務(wù)不受影響?5. mysql - 拖拽重排序后怎么插入數(shù)據(jù)庫?6. mysql 獲取時間函數(shù)unix_timestamp 問題?7. javascript - 微信小程序 wx.downloadFile下載文件大小有限制嗎8. 新入手layuiadmin,部署到tp中。想用php自已寫一個后臺管理系統(tǒng)。9. javascript - 天貓首頁首屏數(shù)據(jù)來源10. 網(wǎng)頁爬蟲 - python+smtp發(fā)送郵件附件問題
