點(diǎn)擊下載提示java.io.FileInputStream cannot be cast to java.lang.String
????//Action ????private?List<File>?upload; private?List<String>?uploadContentType; private?List<String>?uploadFileName; private?String?result; private?String?inputPath; private?String?filename; set/get方法省略 @Override public?String?execute()?throws?Exception?{ if(upload==null){ result?=?"請選擇文件"; return?INPUT; } String?path??=??ServletActionContext.getServletContext().getRealPath("/images"); System.out.println(path); File?file?=?new?File(path); if(!file.exists()){ file.mkdirs(); } int?i=0; //循環(huán)將批量上傳的文件保存到本地 for?(i?=?0;?i?<?upload.size();?i++)?{ FileUtils.copyFile(upload.get(i),?new?File(file,uploadFileName.get(i))); } System.out.println("共上傳了:"+i+"個文件"); result="上傳成功"; return?SUCCESS; } /* ?*?下載action ?*/ public?InputStream?getDownload()?throws?IOException{ String?path?=?ServletActionContext.getServletContext().getRealPath("/images/"); String?filepath?=?path+filename; System.out.println("路徑為:"+filepath); File?file?=?new?File(filepath); //像頁面輸出流 return?FileUtils.openInputStream(file); }
//配置文件 <?xml?version="1.0"?encoding="UTF-8"??> <!DOCTYPE?struts?PUBLIC?"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.1//EN"?"http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!--?配置臨時文件位置?--> <constant?name="struts.multipart.saveDir"?value="/tmp"/> <!--?配置國際化信息?對應(yīng)app是指配置文件的基礎(chǔ)名稱?里面key為異常信息,value為提示信息?--> <constant?name="struts.custom.i18n.resources"?value="app"></constant> <package?name="uploadAndDownload"?extends="struts-default"> <action?name="uploadAndDownload3"?class="com.imooc.action.BatchUploadAndDownloadAction"> <result>/03.jsp</result> <result?name="input">/03.jsp</result> <!--?配置攔截器?--> <interceptor-ref?name="fileUpload"> <param?name="allowedTypes">image/jpeg,image/png</param> <param?name="maximumSize">2M</param> </interceptor-ref> <!--?配置默認(rèn)攔截器??如果不配置則獲取不到file--> ??<interceptor-ref?name="defaultStack"></interceptor-ref>? </action> <action?name="download3"?class="com.imooc.action.BatchUploadAndDownloadAction"?method="getDownload"> <param?name="inputPath">/images/img2-lg.jpg</param> <result?type="stream"> <param?name="contentType">application/octet-stream</param> <!--?由getDownloadFile()獲得inputStream?--> <param?name="inputName">download</param> <param?name="contentDisposition">attachment;filename="${filename}"</param> <param?name="bufferSize">8192</param> </result> </action> </package> </struts>
??//頁面 ??<a?href="download3?filename=img2-lg.jpg">測試.jpg</a> ${error}
沒有找到到底錯在哪里,點(diǎn)下載就報(bào)錯,找了好久沒找到原因啊~~~
2016-11-21
找到原因了 ,在編寫action配置的時候,對應(yīng)action指向了method,返回的InputSteam無法被轉(zhuǎn)換成String,所以按照教程,修改action配置即可。