0

我已经阅读了如何提交额外的表单数据,它确实有效。但是我要完成的是每次发送块时更新formData,因此新数据与块一起发送到服务器。

这是我尝试过的:

$('#upload').fileupload({
    maxChunkSize: 100000, // 100KB
    formData: {UploadID: 'just testing'},
}).bind('fileuploadchunkdone', function (e, data) {
    UId = data.jqXHR.responseJSON.files[0].UploadId;
    console.log(UId); // Confirmed, it does have the data sent back by the server
    data.formData = {UploadID: UId}; // It updates, but doesn't send the new data
}).bind('fileuploadchunksend', function (e, data) {
    // tried the same here, but no luck
});

使用 Firebug 我可以看到发送到服务器的数据。第一个块正确发送 formData,但第二个块再次发送相同的数据。

我也尝试了作者在此处描述的内容,但是覆盖send处理程序不起作用,因为它只发生在第一个块上。

知道如何实现这一目标吗?

4

2 回答 2

1

尚未对此进行测试,但您可以UId在更大范围内定义变量并在每次调用时更新它:

var UId = 'just testing';  

$('#upload').fileupload({
    maxChunkSize: 100000, // 100KB
    formData: function(){
        return [{UploadID: UId}];
    }
}).bind('fileuploadchunkdone', function (e, data) {
    UId = data.jqXHR.responseJSON.files[0].UploadId;
});
于 2013-11-19T18:45:40.207 回答
0

不确定这是否是实现这一目标的正确方法。但这是我所做的:

var UId = 'just testing'; 

$('#upload').fileupload({
    maxChunkSize: 100000, // 100KB
    //formData: {UploadID: UId} REMOVED      
}).bind('fileuploadchunkdone', function (e, data) {
    // UId is set after the chunk is done
    UId = data.jqXHR.responseJSON.files[0].UploadId;
}).bind('fileuploadchunksend', function (e, data) {
    // and append UploadId
    // Yes, append, not override
    data.data.append('UploadId', UId);
    // This will also be fired on the first chunk upload
    // so it is better to set UId in a greater scope as koala_dev said
}

正如我所说,我不知道这是否正确。但它奏效了。

请注意,我已从formData: {UploadID: UId}初始设置中删除。将其保留在那里将使每个块发送UploadID两次,首先在块的顶部(在文件数据之前)使用不可更改的值,然后在块的底部(在文件数据之后)使用新值。

于 2013-11-19T20:55:21.230 回答