Node.js не может переслать изображение через запрос multipart / form-data - PullRequest
0 голосов
/ 24 октября 2018

В моем приложении Node.js есть следующая конечная точка:

app.post('/uploadimage', function (req, res) {

    var form = new multiparty.Form();

    form.parse(req, function(err, fields, files) {
        if (err){
            console.log(err);
            res.send("File(s) upload error");
            return;
        }
        if (files && files.uploadimage){
            var imgArray = files.uploadimage;
            for (var index = 0; index < imgArray.length; index++) {
                var newPath = '/path/to/my/files/';
                var img = imgArray[index];
                newPath += img.originalFilename;
                readAndWriteFile(img, newPath);           
            }
            res.send("File(s) uploaded");
        }
        else {
            res.status(400).send("No 'uploadimage' present in upload request");
        }
    });
});

Когда я отправляю изображение непосредственно на него с помощью запроса данных формы в Postman, оно работает нормально.Заголовки в запросе / uploadimage выглядят так:

{ host: 'localhost:7777',
  connection: 'keep-alive',
  'content-length': '1314170',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
  'cache-control': 'no-cache',
  origin: 'chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop',
  'postman-token': 'd83b600b-9739-1433-801d-.....',
  'content-type': 'multipart/form-data; boundary=----WebKitFormBoundaryhOg3mqey3UTHR3G0',
  accept: '*/*',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8' }

Однако, когда я пересылаю тот же запрос через конечную точку / forwardpost, показанную ниже:

app.post('/forwardpost', function (req, res) {
    const options = {  
        url: 'https://localhost:7777/uploadimage',
        method: 'POST',
        headers: req.headers
    };

    // act as proxy for POST request, returning result through here
    request(options, function(err, response, body) {  
        // ... handle response here ...
    });
});

Это не работаети заголовки выглядят так (с длиной содержимого, равной нулю):

{ host: 'localhost:7777',
  connection: 'keep-alive',
  'content-length': '0',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
  'cache-control': 'no-cache',
  origin: 'chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop',
  'postman-token': 'c1612b11-be20-47c4-716a-.....',
  'content-type': 'multipart/form-data; boundary=----WebKitFormBoundaryhdDKQwuCTXP9JCjj',
  accept: '*/*',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8' }

Я попытался вручную установить длину содержимого на известное значение, но это не проблема.Может кто-нибудь посоветовать мне, как на самом деле передать файл изображения через конечную точку / uploadimage?

РЕДАКТИРОВАТЬ: Включая скриншот, чтобы показать, как я выполняю запрос в Почтальон

Uploading via Postman

...