nbroeking
nbroeking

Reputation: 8928

Why can't multer see any files in my post request?

I have two node servers. One is trying to read files and the other send files. My server is set up like

.post(upload.array('test'), function (req, res) {

  if (!Array.isArray(req.files)) {
    res.status(400).json({success: false, err: 'Must have test(s))'});
    return;
  }

  var files = req.files; <-- This is always null

My Client looks like

  var http = require('request-promise');
  var request = require('request');
  var fs = require('fs');
  var FormData = require('form-data');

  var form = new FormData();

  tests.forEach(function(testName){
    form.append('test', fs.createReadStream(__dirname+'/tests/'+testName));
  });

  var options = {
      method: 'POST',
      uri: 'https://' + name +'/rest/api',
      rejectUnauthorized: false,
      timeout: 2000,
      form: form,
    };

  return http(options);

However the server is never able to find the files. The response always says err: Must have test(s).

Can anyone help me to find out what I am doing wrong in my client?

Upvotes: 0

Views: 71

Answers (1)

mscdex
mscdex

Reputation: 106736

The form option is for urlencoded forms. For multipart forms you will want to set the formData option instead. Also, you don't need to explicitly use the form-data module. Example:

var requestPromise = require('request-promise');
var fs = require('fs');

var formTests = new Array(tests.length);
for (var i = 0; i < tests.length; ++i)
  formTests[i] = fs.createReadStream(__dirname + '/tests/' + tests[i]);

var options = {
  method: 'POST',
  uri: 'https://' + name +'/rest/api',
  rejectUnauthorized: false,
  timeout: 2000,
  formData: {
    tests: formTests
  }
};

return requestPromise(options);

Upvotes: 1

Related Questions