Как я могу получить файл, отправленный с данными формы на сервере (Express.js)?

#node.js #reactjs #express #xmlhttprequest

Вопрос:

У меня есть файлы изображений, добавленные к данным новой формы. Затем мне нужно захватить файл на серверной части, чтобы я мог загрузить его в S3 (он должен быть загружен на стороне сервера). Дело в том, что я не могу получить доступ к файлу на бэкэнде. Я перепробовал несколько промежуточных программ, таких как Groundable, express-fileupload и т. Д., Но все они требуют, чтобы у меня было имя поля ввода для доступа к загруженному файлу. Поскольку это не HTML-форма, у меня нет поля ввода (или я не знаю, где его искать), поэтому я не могу проанализировать запрос и получить загруженный файл.

Вот мой код (параметры-это файлы, выбранные пользователем для загрузки). Я также попробовал ОПУБЛИКОВАТЬ, но безрезультатно, теперь я использую GET для передачи некоторых параметров, которые мне понадобятся позже:

     function onUploadFiles(survey, options) {

    var formData = new FormData();


    var file = options.files[0];
    formData.append(file.name, file);
    
}

    var xhr = new XMLHttpRequest();
    xhr.open(
      "GET",
      `/logmood?file-name=${file.name}amp;file-type=${file.type}`,
    ); // https://surveyjs.io/api/MySurveys/uploadFiles
    xhr.onload = function() {
        var response = JSON.parse(xhr.responseText);

    };
    xhr.send(formData);
 

Итак, на стороне сервера мне нужно добавить файл, а затем продолжить делать то и это, в моем случае загрузку в S3, и этого я не могу достичь. Библиотеки предлагают решения, подобные этому, но, опять же, у меня нет поля ввода:

Вы загружаете файл под названием car.jpg. Поле имени вашего ввода-foo: <input name="foo" type="file" /> . В своем запросе на экспресс-сервер вы можете получить доступ к загруженному файлу из req.files.foo:

 app.post('/upload', function(req, res) {
  console.log(req.files.foo); // the uploaded file object
});
 

Ответ №1:

Вам необходимо использовать библиотеку multer для загрузки файлов в express js https://github.com/expressjs/multer