extjs 4.2 中的文件上传无需 form.submit()

2023-11-27

我正在尝试在 extjs 中上传文件(截至目前任何扩展名)。我有一个模型和商店。文件上传是从窗口中进行的,而窗口中没有表单。我在网上尝试过的所有示例都是使用 form.submit() 的。我改为使用 Ajax 调用(如下所示)将数据发送到服务器。

Ext.Ajax.request({

            url : 'qaf/saveSetupDetails.action',

            params : {
                'data' : recordsToSend
            },
            failure : function(response){
                //console.log('error connecting controller');
            },
            success : function(response){
                //console.log('successfully submitted');
            }
        });

发送数据的记录如下。

var store = Ext.getStore('SomeStore');
        var modifiedRecords = store.getModifiedRecords();
        var recordsToSend = [];
        if(modifiedRecords.length > 0){
            Ext.each(modifiedRecords, function(record){
                recordsToSend.push(record.data);//I'm sure that this is so dump but this is how I do it for other records which are string and not sure how to do it for a file...
            });
        }
        Ext.USE_NATIVE_JSON = true;
        recordsToSend = Ext.encode(recordsToSend);

在模型中设置记录时,我使用以下代码。

var rec = Ext.create('QAF.model.MyModel');
rec.set('modelField',Ext.getCmp('fileUploadCompID').value);

我收到了 500 状态错误的响应"Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]"

我确信这是因为我将模型的值设置为Ext.getCmp('fileUploadCompID').value给出文件名。请让我知道如何将文件设置到模型以及我必须为模型中的字段指定什么数据类型。

下面是我尝试检索弹簧控制器中的文件的方法。

@RequestMapping (value = "/qaf/saveSetupDetails.action")
    public @ResponseBody
    void saveSetupDetails(@RequestParam CommonsMultipartFile data)throws Exception{
        log.info("Enter into saveSetupDetails method..." + data.getOriginalFilename());
    }

请让我知道我做错了什么以及必须采取什么措施来解决这个问题......


如果你仍然想使用 ExtJSfileuploadfield并使用 HTML5 通过 AJAX 调用上传FileReader,你可以这样做:

launchUpload: function () {
    //get a handle of the "file" input in the widget itself...
    var fileInput = document.getElementById(yourUploadField.button.fileInputEl.id);
    var fileReader = New FileReader();
    var fileToUpload = fileInput.files[0]; //assuming your only uploading one file...
    var me = this

    fileReader.onload = function (e) {
         me.onLoadFile(e, me, fileToUpload.name);
    }

    fileReader.readAsDataURL(fileToUpload);

}, 
onLoadFile: function (e, scope, filename) {

     //I carry the scope around for functionality...

     Ext.Ajax.request({
        method: 'POST',
        url: 'url',
        scope: scope,
        jsonData: { fileNameParameter: filename, fileDatainBase64: e.target.result},
        success: function (response, operation) {
            //success..
        },
        failure: function (response, operation) {
            //failure...
        }
    });       

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

extjs 4.2 中的文件上传无需 form.submit() 的相关文章

  • 嗅探/记录您自己的 Android 蓝牙流量

    我最近购买了通过蓝牙与 Android 手机 平板电脑连接的中国设备 由于没有适用于 Windows Linux 的应用程序 我想创建一个供个人使用 通常电话会连接到设备并交换一些数据 我将 PC 连接到设备并查看串行调试器并设法发现协议

随机推荐