六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 77|回复: 0

Ext多文件上传下载

[复制链接]

升级  10.67%

14

主题

14

主题

14

主题

秀才

Rank: 2

积分
66
 楼主| 发表于 2013-2-5 09:05:31 | 显示全部楼层 |阅读模式
以下代码为项目应用中整理,仅供参考。
 

一.多文件上传
 
   1.前台Js代码事例 
items : [{xtype : 'button',text : '添加附件',iconCls : 'silk_page_add',handler : function() {Ext.getCmp("upfile").addFile();}}, {xtype : 'multifileupload',width : 750,allowBlank : false,fileConfig : {xtype : 'fileuploadfield',emptyText : '选择文件上传',fieldLabel : '上传文件',anchor : '95%',buttonCfg : {text : '',iconCls : 'silk_folder_find'}},id : 'upfile',startId : 'post',startName : 'post',labelWidth : 70,limit : 10,allowBlank : false}] 2.后台代码获取上传附件
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;Set<MultipartFile> fileset = new LinkedHashSet<MultipartFile>();for (Iterator it = multipartRequest.getFileNames(); it.hasNext();) {String key = (String) it.next();MultipartFile file = multipartRequest.getFile(key);if (file.getOriginalFilename().length() > 0) {fileset.add(file);}} 注:多附件时可考虑专门建立一个附件表存放附件,在表单提交时需更新附件表,
      同时将多个附件的主键ID以”,”隔开存到主表中。
 
二.多文件展示,下载,删除
 
1.前台Js代码,创建fieldSet
function createDownLoadFieldSet(data,messageId) {downLoadFieldSet = new Ext.form.FieldSet({title : '附件下载',border : true,width : '100%',layout : 'column',autoHeight : true,collapsible: true,collapsed : true});// data为附件表的主键ID,多个以;隔开var attachUrls = data;var attachaUrlArr = attachUrls.split(";");attachaUrlArr.pop();Ext.each(attachaUrlArr, function(urlid) {callBackUrl(urlid,messageId);})} 2.Js附件展示代码 
 
function callBackUrl(urlid,messageId){Ext.Ajax.request({url : SMIS.CTX+'/work/post/postListController/getDocumentByUuid.do',method : 'POST',params : {urlId : urlid},success : function(resp,opt) {var doc = Ext.util.JSON.decode(resp.responseText);// 附件路径var url = doc.attachmentvar pathArr = url.split("/");var fileName = pathArr[pathArr.length - 1];var temp = downLoadFieldSet.add({columnWidth : 1,id : url,style : {padding : '0 0 5 0'},layout : 'column',items : [{xtype : 'label',width : '45%',text : fileName.substring(fileName.indexOf("_")+1,fileName.length),iconCls : 'silk_application_view_gallery'}, {xtype : 'label',width : '5%'}, {xtype : 'label',width : '25%',text : new Date(parseInt(fileName.substring(0,fileName.indexOf("_")))).toLocaleString(),iconCls : 'silk_application_view_gallery'}, {xtype : 'button',text : '下载附件',iconCls : 'silk_application_put',handler : function() {// Js方法,将URL中的中文进行编码url = encodeURI(url); window.open(SMIS.CTX + '/work/post/postListController/getAttachment.do?attachmentFile='+ url);url = decodeURI(url);}}, {xtype : 'button',text : '删除附件',iconCls : 'silk_application_put',handler : function(){removeAttachment(temp,messageId,url);}}]})},failure : function(){Ext.Msg.alert('执行失败',"执行失败!");}})} 
 3.附件移除代码
 
 
function removeAttachment(temp,messageId,url){u = encodeURI(url); Ext.Ajax.request({url : SMIS.CTX + '/discipline/mechanism/SmisInstitutionController/deleteAttachment.do?messageId='+messageId+'&attachmentFile='+u,method : 'POST',success : function(resp ,action){if(Ext.util.JSON.decode(resp.responseText).success){Ext.Msg.alert("执行成功",Ext.util.JSON.decode(resp.responseText).msg);var newattachments = Ext.getCmp("attachments").getValue().replace(Ext.util.JSON.decode(resp.responseText).documentId,"");Ext.getCmp("attachments").setValue(newattachments);// 移除附件显示downLoadFieldSet.remove(Ext.getCmp(url));}else{Ext.Msg.alert("执行失败",Ext.util.JSON.decode(resp.responseText).msg);}},failure : function(){Ext.Msg.alert("执行失败","执行过程中发生错误!");}})} 
4.后台代码获取附件进行下载
java.net.URLDecoder.decode(request.getParameter("attachmentFile"),"UTF-8"); String attachmentFile = java.net.URLDecoder.decode(request.getParameter("attachmentFile"),"UTF-8"); response.setContentType("text/html;charset=UTF-8");try {File file = new File(attachmentFile);InputStream fis = new BufferedInputStream(new FileInputStream(file));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();response.reset();response.addHeader("Content-disposition", "attachment;filename=\"" + new String(file.getName().getBytes("gb2312"), "ISO8859-1"));response.addHeader("Content-Length", "" + file.length());OutputStream toClient = new BufferedOutputStream(response.getOutputStream());toClient.write(buffer);toClient.flush();toClient.close();} catch (IOException ex) {ex.printStackTrace();} 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表