【问题标题】:jQuery file upload in IE9 works only partly (with plugin jQuery File Upload)IE9 中的 jQuery 文件上传仅部分工作(使用插件 jQuery File Upload)
【发布时间】:2016-06-23 23:55:59
【问题描述】:

使用此插件上传的主要目标:

  • 通过 3 个不同的输入字段最多上传 3 个文件(图像),无需重新加载页面。
  • 与未连接到单个文件的其他表单数据一起执行此操作。
  • 在创建和编辑内容项(在本例中为类别)时执行此操作。

我在装有 Windows 7 的 VM 中测试了 IE9。在 Firefox、Chrome 和 Edge 中没有问题。

IE9中的问题是: 上传不起作用,当只上传一个文件并且这个文件不是最后一个文件时(所以当我删除第三个文件输入字段时,通过第二个文件输入字段上传有效)。 至少2个文件一起上传就没有问题了。

我使用的库和插件有:

  • jquery 1.12.1(也使用低至 1.8.3-的版本)
  • jquery-ui 1.11.4(也使用了1.9.2版本)
  • jQuery-File-Upload 9.12.1(也使用低至 8.1.0 的版本):
    • jquery.iframe-transport.js
    • jquery.fileupload.js

插件的配置:

file_upload = form.fileupload({replaceFileInput: false}, {
    //file_upload = form.fileupload({
        url: url,
        dataType: "json",
        singleFileUploads: false,
        autoUpload: false,

        add: function(e,data){
            uploadCategoryWithImage = true;
            filesList.push(data.files[0]);
            paramNames.push(data.paramName);
        },

        done: function(e, data) {
            switch (uploadContext) {
                case 'update':
                    updateCategoryDone(node, form, data.result, data);
                    break;
                case 'create':
                    storeNewCategoryDone(node, form, data.result)
                    break;
                case 'createLevel1':
                    storeNewCategoryLevel1Done(form, data.result);
            }
        },

        fail: function( jqXHR, textStatus ) {
            console.log('prepareCategoryFileUploads fail [jqXHR, textStatus]: ', [jqXHR, textStatus]);
        }

    });

点击表单提交按钮后使用:

file_upload.fileupload('send', {files:filesList, paramName: paramNames});

【问题讨论】:

    标签: jquery internet-explorer file-upload jquery-file-upload blueimp


    【解决方案1】:

    解决了。问题是,当 3 个输入字段中只有一个有文件要上传时,在 jquery.iframe-transport.js 中创建的表单中,“文件”类型的所有输入字段(而不是只有一个)在名称属性中具有真正有文件要提交的输入字段的名称。

    所以对于 IE9,或者通常对于没有 window.FileReader 的浏览器,对于 paramName,我现在给出一个数组,其中包含“文件”类型的输入字段的所有名称。这不能在较新的浏览器中使用,因此这种更改必须仅限于不支持 window.FileReader 的浏览器。

    现在在表单提交后使用这样的代码:

    if (!window.FileReader) {
        paramNames = ['name1', 'name2', 'name3'];
    }
    file_upload.fileupload('send', {files:filesList, paramName: paramNames});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      相关资源
      最近更新 更多