首页 > 代码库 > struts2+extjs文件上传完整实现(解决了上传中的各种问题)

struts2+extjs文件上传完整实现(解决了上传中的各种问题)

首先需要引入上传控件

<script type="text/javascript" src=http://www.mamicode.com/"/js/ext/examples/ux/fileuploadfield/FileUploadField.js" charset="utf-8"></script>

弹出上传框对应extjs代码

var uploadForm=new Ext.FormPanel({
	id:'uploadForm',
	width:520,
	frame:true,
	fileUpload: true,  
	autoHeight:true,
	bodyStyle:'10px 10px 0px 10px',
	labelWidth:50,
	enctype: 'multipart/form-data', 
	defaults:{
		anchor: '95%',
        allowBlank: false
	},
	items:[
		{
			xtype:'fileuploadfield',
			emptyText: '请选择上传文件...', 
            fieldLabel: '文件:', 
            id:'uploadFile',
            name: 'upload', 
            allowBlank: false,   
            blankText: '文件名称不能为空.',   
             buttonCfg: {
	    				text: '选择...'// 上传文件时的本地查找按钮
	          }
		}
	],
	buttons: [{
	                text: '上传',
	                handler: function(){
	                    if(uploadForm.getForm().isValid()){
	                    	uploadForm.getForm().submit({
	    	                    url:basePath+ '/documentManage/upload_upload.action',
	    	                    method:'POST',
	    					    waitTitle: '请稍后',
	    	                    waitMsg: '正在上传文档文件 ...',
	    						success: function(fp, action){
	    	                	  	Ext.MessageBox.alert('信息', action.result.msg);  
	    	                        Ext.getCmp("uploadFile").reset();          // 指定文件字段的id清空其内容
	    	                        addwin.hide();
									grid.store.load({params:{start : 0,limit : combo.value}});
	    	                    },
	    						failure: function(fp, action){
	    	                        Ext.MessageBox.alert('警告', action.result.msg);  
	    	                        addwin.hide();
	    	                    }
	     	                });
	                    }
	                }
	            },{
	                text: '重置',
	                handler: function(){
	            		uploadForm.getForm().reset();
	                }
	            }]
	
});

addwin = new Ext.Window({
	title : '上传新文档',
	closable : true,
	width : 520,
	autoHeight: true,
	border : false,
	plain : true,
	modal : true,
	layout : 'fit',
	bodyStyle : 'padding:5px;',
	maximizable : false,// 禁止最大化
	closeAction : 'hide',
	closable : true,// 是否有关闭
	collapsible : true,// 可折叠
	iconCls : 'bind',
	items : [uploadForm]
});




struts2 action代码

package cn.com.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 javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import cn.com.css.common.action.BaseAction;


public class FileUploadAction extends BaseAction {

	private static final long serialVersionUID = 5156288255337069381L;

	private  String msg;
	private String contentType;
	private File docmentFile;
	private String fileName;


	public String upload() throws Exception {
		String realPath = "E:\\" + fileName;
		if (docmentFile.isFile()) {
			BufferedInputStream bis = new BufferedInputStream(
					new FileInputStream(docmentFile));
			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();
				msg="文件上传失败";
				HttpServletResponse response = ServletActionContext.getResponse();
				response.setContentType("text/html;charset=UTF-8");
				return "none";
			} finally {
				if (bis != null) {
					try {
						bis.close();
					} catch (IOException ie) {
						ie.printStackTrace();
					}
				}
				if (bos != null) {
					try {
						bos.close();
					} catch (IOException ie) {
						ie.printStackTrace();
					}
				}
			}
		}
		msg="文件上传成功";
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=UTF-8");
		return "none";
	}

	public String getFileName() {
		return fileName;
	}

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

	// 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 docmentFile;
	}

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

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String getContentType() {
		return contentType;
	}

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

	public File getDocmentFile() {
		return docmentFile;
	}

	public void setDocmentFile(File docmentFile) {
		this.docmentFile = docmentFile;
	}
	
}



struts.xml配置:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="documentManage" namespace="/documentManage"
		extends="global-struts-default">
		
		<action name="upload_*"
			class="cn.com.FileUploadAction"
			method="{1}">
			<result type="json" name="none">
				<param name="contentType">text/html;charset=utf-8</param>
				<param name="excludeProperties">
				    user.myQuestionses,user.messages,user.myNotes,user.taskPapers,
				    user.tasks,user.testPapers,user.articles
  				</param>
			</result>
		</action>
	</package>
</struts>