`
JavaCrazyer
  • 浏览: 2990806 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

ExtJS之上传文件示例【struts2方式】

阅读更多

今天突然想起来以前的关于EXT的上传的文章没有贴出来,现在贴出代码在此

var uploadForm= new Ext.FormPanel({
	    		id: 'form-panel',
	            fileUpload: true,
	            width: 500,
	            frame: true,
	            //title: '流程文件上传',
	            collapsible:true,
	            autoHeight: true,
	            bodyStyle: 'padding: 10px 10px 0 10px;',
	            labelWidth: 50,
	            defaults: {
	                anchor: '95%',
	                allowBlank: false,
	                msgTarget: 'side'
	            },
	            items: [{
					xtype:'combo',
					width : 200,
					allowBlank : false,
					blankText : '必须选择文档类型',
					hiddenName : 'CId', //这个hiddenName指的就是BookTypeId
					name : 'CName',
					store : new Ext.data.Store({
						autoLoad :true,
						 reader: new Ext.data.JsonReader({//读取json数据   
				                root:'TCategoryList',                        //   
				                totalProperty:'totalProperty',  //总记录数   
				                id:'CId'                    
				             },
						Ext.data.Record.create([
							{name: 'CId'},
							{name: 'CName'}
						])
						),
						proxy : new Ext.data.HttpProxy({
							url : path+'doc/getTCategoryForDoc.action'
						})
					}),//设置数据源
					allQuery:'alldoc',//查询全部信息的查询字符串
					triggerAction: 'all',//单击触发按钮显示全部数据
					editable : false,//禁止编辑
					loadingText : '正在加载文档类型信息',//加载数据时显示的提示信息
					displayField:'CName',//定义要显示的字段
					valueField : 'CId',
					emptyText :'请选择文档类型',
					mode: 'remote',//远程模式
					id:'CName',
					fieldLabel:'类型'
				},{
	                xtype: 'fileuploadfield',
	                id: 'form-file',
	                emptyText: '请选择流程文件...',
	                fieldLabel: '文件',
	                name: 'upload', 	// ★ from字段,对应后台java的bean属性,上传的文件字段
	                buttonCfg: {
	    				text: '',  // 上传文件时的本地查找按钮
	                    iconCls: 'icon-upload'  // 按钮上的图片,定义在CSS中
	                }
	            },
	            {
	                    xtype: 'hidden',
	                    id: 'fileName',
	                    emptyText: '请选择文档文件...',
	                    name: 'fileName',
	                    text:Ext.getCmp("form-file") //在上传这个框中,getCmp可以获取整条路径的最后的名称
	                    
	              },
	              {
		               xtype:'hidden',
		               name : 'docId',
		               id:'docId'
	               }
	           ],
	    		buttons: [{
	                text: '上传',
	                handler: function(){
	    			
	                    if(uploadForm.getForm().isValid()){
	                    	uploadForm.getForm().submit({
	    	                    url:path+ 'upload/upload.action?Tab_staffId='+staffId,
	    	                    method:'POST',
	    					    waitTitle: '请稍后',
	    	                    waitMsg: '正在上传文档文件 ...',
	    						success: function(fp, action){
	                    		updatedocListForUpload(action.result.docId,action.result.name,action.result.docUrl,action.result.CName,action.result.extType,action.result.state);
	    	                	   msg('成功!', '文档文件上传成功!');
	    	                	   //msg("返回的ID呢"+action.result.docId);	    						   
	    							//Ext.log('上传成功。')
	    							//Ext.log(action.failure)
	    							//failure
	    							//Ext.log(action.result.upload);
	    							//Ext.log(action.result.msg);		
	    	                        Ext.getCmp("form-file").reset();          // 指定文件字段的id清空其内容
	    							Ext.getCmp("CName").reset();
	    	                    },
	    						failure: function(fp, action){
	    	                        msg('失败!', '文档文件上传失败!');
	    	                    }
	     	                });
	                    }
	                }
	            },{
	                text: '重置',
	                handler: function(){
	            	uploadForm.getForm().reset();
	                }
	            }]
	        });

  具体处理的ACTION

package lsbpm.web.action;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import lsbpm.db.domain2.TCategory;
import lsbpm.db.domain2.TDoc;
import lsbpm.db.domain2.TDocCategory;
import lsbpm.db.domain2.TStaff;
import lsbpm.web.lecene.LuceneIndex;
import net.sf.json.JSONObject;

import org.apache.struts2.ServletActionContext;

/**
 * Show case File Upload example's action. <code>FileUploadAction</code>
 */
public class FileUploadAction extends BaseAction {

	private static final long serialVersionUID = 5156288255337069381L;

	private String contentType;
	private File upload;
	private String fileName;
	private String caption;
    private String CId;//文档TCategory的ID
	private String jsonMsg;// 返回ExtJs upload form消息
    private String Tab_staffId;
	public String getJsonMsg() {
		return jsonMsg;
	}

	public void setJsonMsg(String jsonMsg) {
		this.jsonMsg = jsonMsg;
	}

	// since we are using <s:file name="upload" .../> the file name will be
	// obtained through getter/setter of <file-tag-name>FileName
	public String getUploadFileName() {
		return fileName;
	}

	public void setUploadFileName(String fileName) {
		this.fileName = fileName;
	}

	// since we are using <s:file name="upload" ... /> the content type will be
	// obtained through getter/setter of <file-tag-name>ContentType
	public String getUploadContentType() {
		return contentType;
	}

	public void setUploadContentType(String contentType) {
		this.contentType = contentType;
	}

	// since we are using <s:file name="upload" ... /> the File itself will be
	// obtained through getter/setter of <file-tag-name>
	public File getUpload() {
		return upload;
	}

	public void setUpload(File upload) {
		this.upload = upload;
	}

	public String getCaption() {
		return caption;
	}

	public void setCaption(String caption) {
		this.caption = caption;
	}

	// 解析上传的流程文件,将流程图分解后存入数据库中
	// 用json格式返回成功失败及错误信息等,可直接与ExtJS衔接。
	
	public String combinStr(String str,int i){
		str=str.substring(0,str.indexOf("."))+i+ str.substring(str.indexOf("."));
		return str;
	}
	
	public String upload() throws Exception {
		System.out.println("执行上传文件操作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。");
		// 定义要返回的对象,返回时用json包装
		HashMap<String, String> retMsg = new HashMap<String, String>();
		TStaff staff=(TStaff)genericService.findById(TStaff.class, Tab_staffId);
		TCategory category=(TCategory)genericService.findById(TCategory.class, CId);
		TDoc doc = new TDoc();
		doc.setName(fileName);//-------------------------------------------------(1)filename属性(非空)
		System.out.println("拼装前------------------>"+fileName);
		List<String> propertisList=new ArrayList<String>();
		propertisList.add("docVersion-");	  
		List<TDoc> result=genericService.findByProperty(doc, propertisList, 0, 0);
		doc.setDocVersion(1);//-------------------------------------------------(2)DocVersion属性(非空)
        int size=propertisList==null?0:result.size();
        if(size>0){
    	   int docVersion=result.get(0).getDocVersion();
    	   doc.setDocVersion(docVersion+1);
    	   fileName=combinStr(fileName,docVersion+1);////主要针对相同名称的文件处理加上版本号
    	   System.out.println("--------------------经过版本升级---------------------------------");
        }
        doc.setDocAlias(fileName);//-------------------------------------------------(3)DocAlias属性(非空)
        doc.setBoost(0d);//-------------------------------------------------(4)Broost属性(非空)
        System.out.println("拼装后----------------->"+fileName);
   	    String realPath="E:\\DataDir\\"+fileName;
		if (upload.isFile()) {
			BufferedInputStream bis = new BufferedInputStream(
					new FileInputStream(upload));
			BufferedOutputStream bos = null;
			try {
				bos = new BufferedOutputStream(new FileOutputStream(realPath));//为以防万一,以后写文件的路径尽量写成正双斜杠的
				// 从源文件中取数据,写到目标文件中
				byte[] buff = new byte[8192];
				for (int len = -1; (len = bis.read(buff)) != -1;) {
					bos.write(buff, 0, len);
				}
				bos.flush();
			} catch (IOException ie) {
				ie.printStackTrace();
			} finally {
				if (bis != null) {
					try {
						bis.close();
					} catch (IOException ie) {
						ie.printStackTrace();
					}
				}
				if (bos != null) {
					try {
						bos.close();
					} catch (IOException ie) {
						ie.printStackTrace();
					}
				}
			}
			
	       
			System.out.println("----------------------------0000");
			doc.setDocUrl(fileName);//-------------------------------------------------(5)DocUrl属性(非空)		
		    doc.setExtType(fileName.substring(fileName.lastIndexOf('.')+1));//---------(6)extType属性(非空)			   
			doc.setState("可用");//状态这个暂时写死为可用 //----------------------------------(7)state属性(非空)
			doc.setTStaffByDesigner(staff);//设计者先和操作者暂定为同一人-------------------- (8)designer属性(可空)
	    	doc.setTStaffByOperator(staff);//------------------------------------------(9)operator属性(非空)
	    	doc.setUpgradeDate(new Timestamp(System.currentTimeMillis()));
			boolean isSuccess = false;
			System.out.println("即将要插入数据库的文件内容为:"+doc);
			genericService.create(doc);
			
			//插入文档类型
			TDocCategory cate=new TDocCategory();
			cate.setTCategory(category);
			cate.setTDoc(doc);
			cate.setBoost(0d);
			genericService.create(cate);
			
			
			String Id = doc.getDocId();
			System.out.println("新增后获取到的员工ID" + Id);		
			System.out.println(fileName + "----------------");
			
			String extTypes=doc.getExtType();	
			//如果上传的文件在我要建立索引的范围之内,可以见索引,否则不建立
			if(extTypes.equals("pdf")||extTypes.equals("html")||
				extTypes.equals("rtf")||extTypes.equals("doc")||
				extTypes.equals("ppt")||extTypes.equals("xls")||
				extTypes.equals("txt")){
			 LuceneIndex index=new LuceneIndex();//建立索引
		     index.buildsingle(doc);
		     System.out.println("索引完毕。。。。。。。。。。。。。。。。。。。。。");
			}
		   
			// 流程文件解析和加载,成功! 将流打到客户端
			retMsg.put("success", "true");
			retMsg.put("docId", Id);
			retMsg.put("name", doc.getDocAlias());
			if(doc.getTDocCategories().size()==1){
				 for(TDocCategory cate1:doc.getTDocCategories()){
					 retMsg.put("CName",cate1.getTCategory().getName());
				 }
			}
			retMsg.put("extType", doc.getExtType());
			retMsg.put("state", doc.getState());
			retMsg.put("docId", doc.getDocId());
			retMsg.put("docUrl", doc.getDocUrl());
			retMsg.put("upload", "ok");
			retMsg.put("msg", "hhaahhaa!!");

		} else {
			// 流程文件解析和加载,失败!
			retMsg.put("failure", "true");
			retMsg.put("upload", "error");
			retMsg.put("msg", " failed !!");

		}

		// json包装返回对象
		jsonMsg = JSONObject.fromObject(retMsg).toString();
		return SUCCESS;
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public String getCId() {
		return CId;
	}

	public void setCId(String cId) {
		CId = cId;
	}

	public String getTab_staffId() {
		return Tab_staffId;
	}

	public void setTab_staffId(String tabStaffId) {
		Tab_staffId = tabStaffId;
	}
	
	

}

 struts.xml中添加一行代码

   <!-- 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 -->
 <constant name="struts.multipart.maxSize" value="102400000000000" />

4
2
分享到:
评论
5 楼 zhaoluck 2013-08-05  
急求 为啥我的上传有时候成功有时候失败呢?contentType  在strust2 里有配置吗?
4 楼 pintnotice 2011-12-28  
还需要这几个文件.
17.import lsbpm.db.domain2.TCategory; 
18.import lsbpm.db.domain2.TDoc; 
19.import lsbpm.db.domain2.TDocCategory; 
20.import lsbpm.db.domain2.TStaff; 
21.import lsbpm.web.lecene.LuceneIndex; 
3 楼 gostseraph 2010-09-28  
请问你的ACTION返回的是JSON吗 ?
为什么我上传后,返回的JSON数据,提示下载呢 ?
2 楼 JavaCrazyer 2010-07-26  
xff 写道
咦,为了extjs+strust2文件上传上网搜到lz的文章,却不想楼主原来也对《弟子规》有研究?

呵呵,本人十分欣赏我国的古典文化作品,弟子规堪称经典,想必每个人都会有所了解吧
1 楼 xff 2010-07-24  
咦,为了extjs+strust2文件上传上网搜到lz的文章,却不想楼主原来也对《弟子规》有研究?

相关推荐

Global site tag (gtag.js) - Google Analytics