How do I send a form with a request promise?

2019-07-09 01:08发布

问题:

I am trying to use the request-promise library or anything similar to send files via a post request from node to another machine that is running Node. Using the normal request module I could so something like

var req = request.post(url, function (err, resp, body) {
 if (err) {
    console.log('Error!');
  } else {
    console.log('URL: ' + body);
  }
});
var form = req.form();
form.append('file', '<FILE_DATA>', {
  filename: 'myfile.txt',
  contentType: 'text/plain'
});

This code is from the question: Uploading file using POST request in Node.js however it is not using promises.

Can anyone explain how to do the same thing but with the request-promise library or if there is any other way to promisify this?

回答1:

According to the docs that are linked from the answer you already found, you don't need to use a .form() method on the resulting request object, but can simply pass the form as the formData option to request. You'll be able to do the same with request-promise:

requestPromise.post({url: url, formData: {
    file: {
        value: '<FILE_DATA>',
        options: {
            filename: 'myfile.txt',
            contentType: 'text/plain'
        }
    }
}).then(function(body) {
    console.log('URL: ' + body);
}, function(err) {
    console.log('Error!');
});

Alternatively, request-promise still seems to return request instances (just decorated with then/catch/promise methods), so the form function should still be available:

var req = requestPromise.post(url);
var form = req.form();
form.append('file', '<FILE_DATA>', {
  filename: 'myfile.txt',
  contentType: 'text/plain'
});
req.then(function(body) {
    console.log('URL: ' + body);
}, function(err) {
    console.log('Error!');
});