我正在尝试向我的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);
})
任何人都可以帮助我。
答案 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)`