14

我正在使用 jQuery File Upload 库(http://github.com/blueimp/jQuery-File-Upload),我一直在弄清楚如何使用满足以下条件的库。

  • 该页面有多个由表单标签包围的文件输入字段。
  • 用户可以将多个文件附加到每个输入字段
  • 单击按钮时,所有文件都将发送到服务器,而不是当文件附加到输入字段时。
  • 上传是异步完成的
  • 假设页面有 3 个输入字段,其名称属性分别为“file1[]”、“file2[]”和“file3[]”,请求有效负载应类似于 {file1: [array of files on file1[]], file2 : [file2[] 上的文件数组], ...}

这是 jsFiddle,到目前为止它的行为很奇怪,因为它发送了两次 post 请求,第一个被取消了。

更新

现在感谢@CBroe 的评论,请求被发送两次的问题得到了解决。但是请求参数的键没有正确设置。这是更新的 jsFiddle。

http://jsfiddle.net/BAQtG/27/


js代码的核心部分是这样的。

$(document).ready(function(){
    var filesList = []
    var elem = $("form")
    file_upload = elem.fileupload({
        formData:{extra:1},
        autoUpload: false,
        fileInput: $("input:file"),
    }).on("fileuploadadd", function(e, data){
        filesList.push(data.files[0])
    });

    $("button").click(function(){
        file_upload.fileupload('send', {files:filesList} )
    })

})

有人知道如何让它工作吗?

4

3 回答 3

17

解决了。

小提琴:http: //jsfiddle.net/BAQtG/29/

和js代码

$(document).ready(function(){
    var filesList = [],
        paramNames = [],
        elem = $("form");
    file_upload = elem.fileupload({
        formData:{extra:1},
        autoUpload: false,
        fileInput: $("input:file"),
    }).on("fileuploadadd", function(e, data){
        filesList.push(data.files[0]);
        paramNames.push(e.delegatedEvent.target.name);
    });

    $("button").click(function(e){
        e.preventDefault();
        file_upload.fileupload('send', {files:filesList, paramName: paramNames});
    })
})
于 2013-11-06T13:28:10.850 回答
1

您必须添加一个return false;,如下所示:

$("button").click(function(){
    file_upload.fileupload('send', {files:filesList} )
    return false;
})

或指定type="button"属性:

<button type="button">send by fileupload send api</button>

为了设置formData,请使用以下命令:

$("button").click(function () {
    file_upload.fileupload('send', {
        files: filesList,
        formData: {
            json: JSON.encode({
                extra: 1
            })
        }
    })
})

特别是对于JSFiddle,如果要获取extra响应中的值,则必须对其进行编码并将其分配给名为json.

是一个工作示例。

于 2013-11-06T09:53:01.847 回答
1

由您的脚本触发的第一个 POST 请求被取消,因为按钮提交了表单(导致第二个 POST 请求)。

如果您希望它具有提交功能,type="button"请使用。button

于 2013-11-06T09:37:50.887 回答