NodeJS尝试在fs.createfilestream内部使用URL

时间:2018-11-22 11:38:42

标签: javascript node.js

我正在尝试向我的api发出发布请求,该api可以正常运行(我可以发布文件,但不能通过url),但是现在我试图通过url进行发布。

这是我现在拥有的代码,我删除了一些与问题无关或待测试的行。

    request({
                url: url + "gettoken"
                , json: true
            }, function (error, response, body) {
                user = body;
                var rs = fs.createReadStream(up.url);
                var ws = request.post(url + "upload?token=" + `${user.token}&key=${user.key}&filename=${filename}`);
                ws.on('drain', function () {
                    rs.resume();
                });
                rs.on('end', function () {
                    console.log(filename);
                });
                ws.on('error', function (err) {
                    console.error('cannot send file ' + err);
                });
                rs.pipe(ws);
            })

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

因此,想法是将位于up.url的文件上传到位于url + "upload?..."的另一台服务器上。

由于fs.createReadStream用于读取本地文件,而不是URL,因此您需要一些可以从URL创建流的东西(或者检索该URL并传输响应)。

您也可以使用request

request({
  url:  url + "gettoken",
  json: true
}, function (error, response, body) {
  const user = body;
  const rs   = request.get(up.url);
  const ws   = request.post(url + "upload?token=" + `${user.token}&key=${user.key}&filename=${filename}`);

  rs.on('end', function () {
    console.log(filename);
  });
  ws.on('error', function (err) {
    console.error('cannot send file ' + err);
  });

  rs.pipe(ws);
});

通常,文件上载通过multipart/form-data进行,但是您的代码并不建议在此处使用。如果是这样,代码将变成这样:

const ws = request.post(url + "upload?token=" + `${user.token}&key=${user.key}&filename=${filename}`, {
  formData : {
    the_file : rs
  }
});
// no `rs.pipe(ws)`