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

jopen 7年前

首先需要引入上传控件

<script type="text/javascript" src="<%=basePath%>/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]        });  
</div> </div>



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


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>  
</div> </div>