#javascript #node.js
Вопрос:
У меня есть форма загрузки изображения, которая отправляет запрос на отправку в конечную точку узла / загрузку. Вот, мой app.js запрашивает переменную файла из формы, а затем (с помощью Multer) помещает этот файл в специальный каталог загрузки.
<form
id="form"
action="/upload"
method="POST"
enctype="multipart/form-data"
>
// when formBtn is changed (file selected) declare file var and submit
formBtn.addEventListener("change", function () {
// file that is requested in app.js
const file = this.files[0];
form.submit()
});
Я пытаюсь добавить функцию перетаскивания. В теле я добавил <body ondrop="dragHandler(event);">
, который вызывает функцию dragHandler ondrop и передает событие. Функция dragHander()
предотвращает действие по умолчанию (открытие изображения в браузере), проверяет, был ли удален файл, определяет файл и отправляет форму.
function dragHandler(event) {
var file;
event.preventDefault();
if (event.dataTransfer.items) {
if (event.dataTransfer.items[0].kind == "file") {
file = event.dataTransfer.items[0].getAsFile();
form.submit;
} else console.log('not a file');
}
Поскольку отброшенный файл не был загружен в форму, запрос post (сделанный формой) не содержит переменной файла и не передает эту информацию обратно в app.js. Как бы я мог вставить свою файловую переменную (в dragHandler) в форму, чтобы ее можно было правильно перенести в app.js?
app.js:
app.post("/upload", (req, res, next) => {
upload(req, res, (err) => {
if (err) {
console.log("err: " err);
} else {
// req.file is undefined when dropped in
if (req.file == undefined) {
console.log("file is not defined");
} else {
console.log(req.file);
}
}
});
});
Комментарии:
1. Вы должны изменить это
if
выражение, чтобы на самом деле проверить наличие необходимых данных, вы должны использоватьif (event.dataTransfer amp;amp; event.dataTransfer.items.length >= 1)
его вместо этого — и вы должны зарегистрировать ошибку или выбросить, если произойдет что-то неожиданное.2. @Dai Хорошее предложение, даже не подумал об этом.