невозможно получить и проанализировать Multipart, а также текстовые данные в узле JS в функции Azure - PullRequest
0 голосов
/ 20 февраля 2019

Я создаю функцию Azure в Node JS.Мне нужно отправить данные Multipart (изображения или файлы), а также текстовые данные (другую информацию, например, где сохранить файл и т. Д.).

Из пользовательского интерфейса я отправляю данные (файлы и текст) в виде формыДанные (новые FormData ())

В функции Azure Я использую parse-multipart для чтения многокомпонентных данных.

Моя функция Azure Похоже на это.

var stream = require('stream');
var multipart = require("parse-multipart");
module.exports = async function (context, req) {

  var bodyBuffer = Buffer.from(req.body);
  // get boundary for multipart data e.g. ------WebKitFormBoundaryDtbT5UpPj83kllfw
  var boundary = multipart.getBoundary(req.headers['content-type']);
  // parse the body
  var parts = multipart.Parse(bodyBuffer, boundary);
    var fileStream0 = new stream.Readable();
    fileStream0.push(parts[0].data);
    fileStream0.push(null);
    // Further Uses this Stream to save files to Azure Storage
}

Этот код работает нормально, так как я могу сохранить файл.Но, к сожалению, не удалось получить текстовые значения, отправленные в данных формы.

1 Ответ

0 голосов
/ 25 февраля 2019

Эта переменная parts - это любой массив, каждый элемент которого представляет собой одно поле в представленной форме.Таким образом, вам придется перебрать этот массив для извлечения всех отправленных полей.

Я полагаю, вам придется изменить свой код на что-то вроде этого

var stream = require('stream');
var multipart = require("parse-multipart");

module.exports = async function (context, req) {

  var bodyBuffer = Buffer.from(req.body);
  // get boundary for multipart data e.g. ------WebKitFormBoundaryDtbT5UpPj83kllfw
  var boundary = multipart.getBoundary(req.headers['content-type']);
  // parse the body
  var parts = multipart.Parse(bodyBuffer, boundary);
  for (var part of parts) {
    if(part.filename) {
      // handle file
    } else {
      // handle other form field
    }
  }
}
...