SpringMvc3+extjs4實現(xiàn)上傳與下載功能
本文實例為大家分享了SpringMvc3+extjs4實現(xiàn)上傳與下載的具體代碼,供大家參考,具體內(nèi)容如下
最近生活過的很充實,人一直在不停的忙碌著學(xué)習(xí)新東西。這是我最近遇到的問題,我找度娘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>
后臺代碼:
/** *記錄返回結(jié)果*/ 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; //定義一個計數(shù)器,用于上傳文件的重命名 @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()); } // 設(shè)置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(); //從數(shù)據(jù)庫中查詢存在此類文件名否 Long count=proAnnextDao.isRepeatName(name); //如果存在一樣的文件名,就進(jìn)行從命名 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(); } // 設(shè)置ExtJS返回 - sucsess extjsFormResult.setSuccess(true); } catch (Exception e) { e.printStackTrace(); // 設(shè)置ExtJS返回 - error extjsFormResult.setSuccess(false); } return extjsFormResult.toString(); } }
springMvc.xml(此文件名可能跟項目的實際情況有區(qū)別)中的配置:
<!-- 上傳文件,限制大小的配置 --> <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/><!-- 使用默認(rèn)的servlet來響應(yīng)靜態(tài)文件 --> <!-- 文件的上傳與下載 --> <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(); //設(shè)置響應(yīng)的報頭信息(中文問題解決辦法) 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;這樣就可以下載了.... 超連接的寫法基本一樣,這里就不多說了.
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringMVC+Ajax實現(xiàn)文件批量上傳和下載功能實例代碼
- MyBatis與SpringMVC相結(jié)合實現(xiàn)文件上傳、下載功能
- SpringMVC實現(xiàn)文件的上傳和下載實例代碼
- springMVC配置環(huán)境實現(xiàn)文件上傳和下載
- 在SpringMVC框架下實現(xiàn)文件的上傳和下載示例
- SpringMVC下實現(xiàn)Excel文件上傳下載
- SpringMVC框架實現(xiàn)圖片上傳與下載
- SpringMVC實現(xiàn)文件上傳和下載功能
- SpringMVC實現(xiàn)文件上傳和下載的工具類
- SpringMVC實現(xiàn)上傳下載文件
相關(guān)文章
Springboot項目使用html5的video標(biāo)簽完成視頻播放功能
這篇文章主要介紹了Springboot項目使用html5的video標(biāo)簽完成視頻播放功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12淺談Spring Cloud zuul http請求轉(zhuǎn)發(fā)原理
這篇文章主要介紹了淺談Spring Cloud zuul http請求轉(zhuǎn)發(fā)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08Java Email郵件發(fā)送簡單實現(xiàn)介紹
電子郵件從用戶電腦的郵件軟件,例如Outlook,發(fā)送到郵件服務(wù)器上,可能經(jīng)過若干個郵件服務(wù)器的中轉(zhuǎn),最終到達(dá)對方郵件服務(wù)器上,收件方就可以用軟件接收郵件2022-11-11