#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