Форма загрузки файла jQuery Дата не обновляются

Я уже читал, как отправить дополнительные данные формы, и это на самом деле работает. Но я пытаюсь обновить 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 Обработчик не работает, потому что это происходит только на первом фрагменте.

Есть идеи, как мне этого добиться?

2 ответа

Не проверял это, но вы можете определить 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;
});

Не уверен, что это правильный путь для достижения этой цели. Но вот что я сделал:

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 дважды, сначала в верхней части чанка (перед данными файла) с неизменным значением, а затем в нижней части чанка (после данных файла) с новым значением.

Другие вопросы по тегам