您好,登錄后才能下訂單哦!
這篇文章主要講解了SpringMvc3+extjs4實現上傳與下載功能的代碼解析,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
本文實例為大家分享了SpringMvc3+extjs4實現上傳與下載的具體代碼,供大家參考,具體內容如下
最近生活過的很充實,人一直在不停的忙碌著學習新東西。這是我最近遇到的問題,我找度娘n了很久,終于找到了解決方案!
前臺代碼:
<script> Ext.onReady(function() { Ext.create('Ext.form.Panel', { title : '文件上傳', width : 400, bodyPadding : 10, frame : true, renderTo : document.body, items : [ { xtype : 'filefield', name : '文件', fieldLabel : 'File', labelWidth : 50, msgTarget : 'side', allowBlank : false, anchor : '100%', buttonText : '請選擇文件...' } ], buttons : [ { text : '上傳', handler : function() { var form = this.up('form').getForm(); if (form.isValid()) { form.submit({ url : '根路徑/fileUploadDown/fileUpload', waitMsg : '正在上傳文件中...', success : function(fp, o) { Ext.Msg.alert('上傳文件成功!'); } }); } } } ] }); }); </script>
后臺代碼:
/** *記錄返回結果*/ class ExtJSFormResult { private boolean success; public boolean isSuccess() { return success; } public void setSuccess(boolean success) { } public String toString() { return "{success:" + this.success + "}"; } } class FileUploadBean { private CommonsMultipartFile file; public CommonsMultipartFile getFile() { return file; } public void setFile(CommonsMultipartFile file) { this.file = file; } } /** * 文件的上傳與下載 * @author Administrator * */ @Controller @RequestMapping(value = "/fileUploadDown") public class FileUploadAndDownController { private static int countter=1; //定義一個計數器,用于上傳文件的重命名 @Autowired private ProAnnexDao<ProAnnex> proAnnextDao; public void setProAnnextDao(ProAnnexDao<ProAnnex> proAnnextDao) { this.proAnnextDao = proAnnextDao; } @RequestMapping(value="fileUpload",method = RequestMethod.POST) public @ResponseBody String create(RedirectAttributes redirectAttributes,FileUploadBean uploadItem, BindingResult result,HttpSession session){ //獲取根路徑 String uploadFolderPath = session.getServletContext().getRealPath("/"); ExtJSFormResult extjsFormResult = new ExtJSFormResult(); try { if (result.hasErrors()) { for (ObjectError error : result.getAllErrors()) { System.err.println("Error: " + error.getCode() + " - " + error.getDefaultMessage()); } // 設置ExtJS返回 - error extjsFormResult.setSuccess(false); return extjsFormResult.toString(); } MultipartFile file = uploadItem.getFile(); String fileName = null; InputStream inputStream = null; OutputStream outputStream = null; if(file.getSize()>0){ System.out.println("File Size:::" + file.getSize()); if(file.getSize()>5242880){ System.out.println("File Size:::" + file.getSize()); extjsFormResult.setSuccess(false); return "error"; } inputStream = file.getInputStream(); File newFile = new File(uploadFolderPath + "fileUpload/"); //如果文件路徑不存在就新建一個 if(!newFile.exists()){ newFile.mkdirs(); } //獲取文件名 String name=file.getOriginalFilename(); //從數據庫中查詢存在此類文件名否 Long count=proAnnextDao.isRepeatName(name); //如果存在一樣的文件名,就進行從命名 if (count>0) { name=name.substring(0, name.lastIndexOf("."))+"("+(countter++)+")"+name.substring(name.lastIndexOf(".")); } fileName = uploadFolderPath + "fileUpload/" + name; outputStream = new FileOutputStream(fileName); int readBytes = 0; byte[] buffer = new byte[10000]; while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) { outputStream.write(buffer, 0, readBytes); } outputStream.close(); inputStream.close(); } // 設置ExtJS返回 - sucsess extjsFormResult.setSuccess(true); } catch (Exception e) { e.printStackTrace(); // 設置ExtJS返回 - error extjsFormResult.setSuccess(false); } return extjsFormResult.toString(); } }
springMvc.xml(此文件名可能跟項目的實際情況有區別)中的配置:
<!-- 上傳文件,限制大小的配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--resolveLazily屬性啟用是為了推遲文件解析,以便在Upload中捕獲文件大小異常--> <property name="resolveLazily" value="true"/> <property name="maxUploadSize" value="5242880" /> </bean> <!-- 將無法mapping到Controller的path交給default servlet handler處理 --> <mvc:default-servlet-handler/><!-- 使用默認的servlet來響應靜態文件 --> <!-- 文件的上傳與下載 --> <mvc:view-controller path="/" view-name="redirect:/fileUploadDown"/>
以上的就是上傳文件了。
那下載呢?
下載比較簡單,代碼如下:
@RequestMapping("/downloadFile") public void download(@Valid @ModelAttribute("downLoadName") String downLoadName, HttpServletResponse response,HttpSession session,BindingResult result,HttpServletRequest request) throws IOException { response.setCharacterEncoding("UTF-8"); request.setCharacterEncoding("UTF-8"); //獲取文件的路徑 String url=session.getServletContext().getRealPath("/")+"/fileUpload/"+downLoadName; System.out.println(url); File file=new File(url); InputStream input = FileUtils.openInputStream(file); byte[] data = IOUtils.toByteArray(input); //System.out.println("文件名:"+downLoadName); response.reset(); //設置響應的報頭信息(中文問題解決辦法) response.setHeader("content-disposition","attachment;fileName="+URLEncoder.encode(downLoadName, "UTF-8")); response.addHeader("Content-Length", "" + data.length); response.setContentType("application/octet-stream; charset=UTF-8"); IOUtils.write(data, response.getOutputStream()); IOUtils.closeQuietly(input); }
在界面上只要有一個連接地址:如:window.location.href="根路徑/fileUploadDown/downfile/downLoadName="+name;這樣就可以下載了.... 超連接的寫法基本一樣,這里就不多說了.
看完上述內容,是不是對SpringMvc3+extjs4實現上傳與下載功能的代碼解析有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。