ExtJs上传文件

        最近项目用到了ExtJs6.0.2版本,比现在主流的ExtJS框架都要前沿。

        我之前用的是EasyUI上传的工作流部署的压缩文件,现在想用ExtJs来做。

        废话不多说,上明码。

        关于Ext.form.Panel相关的属性,我就不多说什么了,自己查询API文档即可。

        重点在于按钮,bottons中,点击按钮触发的事件,那里定义了form的属性。

        其中有两条属性十分关键,第一条是method属性,第二条是enctype属性,早上因为没有加上enctype属性,导致Controller中的接收的参数总是为空。method="post",enctype="multipart/form-data"

        当然了,上传文件的那个input标签的 name属性,值要与Controller中的接收参数一致,

        这里的值是 name='deployFile'

        这里最大的教训就是,当时考虑到了enctype属性,但是把它的属性误理解为了Ext.form.Panel的属性了,后来才反应过来,enctype这个属性,它应该是form表单的属性,所以在form提交的JS里面添加上去,NullPointerException解决。

        前端JS代码如下

 /********************上传工作流Zip******************************/
        Ext.create('Ext.form.Panel', {
            title: '部署工作流Zip压缩包',
            width: 400,
            bodyPadding: 10,
            frame: true,
            renderTo: Ext.getBody(),
            items: [{
                xtype: 'filefield',
                name: 'deployFile',
                fieldLabel: '压缩文件',
                labelWidth: 60,
                msgTarget: 'side',
                fileUpload: true,
                allowBlank: false,
                anchor: '100%',
                buttonText: '请选择压缩包位置'
            }],

            buttons: [{
                text: '上传部署',
                buttonAlign: 'center',
                handler: function () {
                    var form = this.up('form').getForm();
                    if (form.isValid()) {
                        form.submit({
                            method: 'post',
                            enctype: "multipart/form-data",
                            url: '<c:url value="/actions/deploy/add"/>',
                            waitMsg: '正在上传中...',
                            success: function (fp, o) {
                                Ext.Msg.alert('Success', '部署成功');
                            },
                            failure: function (form, action) {
                                Ext.Msg.alert('部署失败', action.result.reason);
                            }
                        });
                    }
                }
            }]
        });

        效果如下:

        后台Controller接收代码:

        

    @RequestMapping(value = {URL_DEPLOY_ADD}, method = {POST})
    @ResponseBody
    public JsonResponseVO accountLogin(MultipartFile deployFile) {
        //获取部署文件的名字
        String fileName = deployFile.getOriginalFilename();
        //把文件的后缀去掉
        fileName = fileName.substring(0, fileName.lastIndexOf("."));
        Deployment deployment;

        //获取部署接口实现
        try {
            deployment = repositoryService.createDeployment()//创建部署
                    .name(fileName)//需要部署的流程名称,将会记录在流程部署表的 NAME_ 字段上
                    .addZipInputStream(new ZipInputStream(deployFile.getInputStream()))//添加Zip输入流
                    .deploy();
        } catch (IOException e) {
            e.printStackTrace();
            return new JsonResponseVO(false, "部署失败");
        }
        LOGGER.info("部署id={}", deployment.getId());//获取部署id
        LOGGER.info("部署名称={}", deployment.getName());//获取部署名称
        return new JsonResponseVO();
    }

分割线--------------------------------------------------------------------------------------

        EasyUI的form表单,它的代码就比较简单了,后台一样,前台代码如下:

        

<!--上传对话框HTML-->
<div id="dialog">
    <!--上传要使用method="post" enctype="multipart/form-data"-->
    <form id="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="deployFile" class="easyui-validatebox" data-options="required:true">
    </form>
</div>

如果本文对你有帮助,不妨请我喝瓶可乐吧!

你的打赏是对我最好的支持!

                    

posted @ 2022-07-17 12:12  小大宇  阅读(123)  评论(0编辑  收藏  举报