NodeJS Многопартийная загрузка файла в Azure и текстовое поле
Мне нужно убедиться, что документ mongodb существует, прежде чем продолжить загрузку файлов Azure.
Форма состоит из файла и текстового поля, необходимая логика следующая:
- Отправка формы
- Получить текстовое поле
- Поиск в mongodb для документа с данными текстового поля
- Если элемент существует, продолжайте загрузку файла в Azure, иначе вернитесь
- Загрузка файла в Azure
- Сохраните URL-адрес файла в том же документе MongoDB, который был найден в
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу прикоснуться к полевым данным в form.on('part') и не могу заставить их работать с использованием form.parse в первую очередь. Это мой код, я хочу менять библиотеки и делать все возможное, чтобы он работал.
var form = new multiparty.Form();
var formField = "";
form.parse(req, function(err, fields, files) {
formField = fields.fieldinform[0];
});
console.log(formField); //empty async?
model
.findOne({ name: formField })
.then(obj => {
form.on("part", function(part) {
if (!part.filename) return;
var size = part.byteCount;
var name = part.filename;
var container = "test";
blobService.createBlockBlobFromStream(
container,
name,
part,
size,
function(error) {
if (error) {
console.log("failed");
}
}
);
});
})
.catch(e => {
//do not continue
});
Помощь будет высоко ценится!
1 ответ
После долгих поисков и отсутствия правильного ответа я решил использовать jquery, который перед отправкой изменил URL-адрес действия формы на /upload/textintextfield, а затем перехватил его с помощью req.params.textfield в узле.
<script>
$('#fileUploadForm').submit(function() {
$('#fileUploadForm').attr('action', '/upload/addvideo/' + $('#textfield').val())
return true;
});
</script>