Обработка загрузки файла с помощью 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) {

    }
});

Теперь файл отправляется отлично:)

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