Обработка загрузки файла с помощью reqwest в Javascript
Я использую следующую систему для обработки AJAX-загрузок: https://github.com/ded/reqwest
Хотя это работает для всего, что я пробовал до сих пор - теперь мне нужно сделать загрузку файла (когда ввод будет изменен). Как вы идете об этом? Пока что у меня есть:
document.getElementById('upload-file').addEventListener("change", function(e){
var formData = new FormData();
var file = e.currentTarget.files[0];
reqwest({
url: '/cgi-bin/upload.cgi',
type: 'json',
method: 'post',
headers: {
'enctype': 'multipart/form-data'
},
data: { the_file: file },
error: function (err) {
alert("There was an error: " + err)
},
success: function (data) {
}
});
});
К сожалению, это просто отправляет:
the_file [объект + файл]
... без данных, прикрепленных к файлу.
2 ответа
Вам нужно будет использовать API FileReader.
document.getElementById('upload-file').addEventListener("change", function(e){
var formData = new FormData();
var file = e.currentTarget.files[0];
var reader = new FileReader();
// The load event is fired each time the reading operation is successfully completed.
reader.onload = function(event) {
var jsonData = JSON.parse(event.target.result); // event.target.result is the file's data
reqwest({
url: '/cgi-bin/upload.cgi',
type: 'json',
method: 'post',
headers: {
'enctype': 'multipart/form-data'
},
data: { the_file: file },
error: function (err) {
alert("There was an error: " + err)
},
success: function (data) {
}
});
}
reader.readAsText(file);
});
Я только что нашел ответ здесь:
https://github.com/ded/reqwest/issues/135
Оказывается, вам нужно:
processData: false, // important
Итак, полный код:
reqwest({
url: '/cgi-bin/upload.cgi',
type: 'json',
method: 'post',
processData: false, // important
headers: {
'enctype': 'multipart/form-data'
},
data: fd,
error: function (err) {
alert("There was an error: " + err)
},
success: function (data) {
}
});
Теперь файл отправляется отлично:)