我正在尝试向我的 api 发送发布请求,该 api 运行良好(我可以发布文件,但不能通过网址发布),但现在我尝试通过网址发布。
这是我现在的代码,我删除了一些与问题无关或用于测试的行。
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);
})
谁能帮帮我。
最佳答案
因此,我们的想法是将位于 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)`
关于javascript - NodeJS 尝试使用 fs.createfilestream 内部的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53430170/