gpt4 book ai didi

Node.js & 请求模块 : Start upload from a readable stream

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:27 24 4
gpt4 key购买 nike

当用户在我的 Node.js 服务器上上传文件时,我需要将同一文件上传到另一台服务器。

我想知道是否可以开始将上传的部分发送到第二个服务器,而不必等待文件完全上传到我的 node.js 服务器上。

我正在使用请求模块https://github.com/mikeal/request上传到第二个服务器。

下面的代码会等到用户完成上传后再开始第二次上传(尽管我对此不是 100% 确定):

app.post('/upload', function(req, res, next){
fs.readFile(req.files.file.path, function (err, data) {
var newName = moment().format('YYYYMMDDHHmmss') + "_" + (Math.floor(Math.random() * (10000 - 0) + 0));
var name = newName + "." + req.files.file.extension;
var newPath = "public/uploads/"+name;
fs.writeFile(newPath, data, function (err) {
if (err) {
throw err;
res.send("error");
}
fs.unlink(req.files.file.path, function (err) {
if (err) response.errors.push("Erorr : " + err);
console.log('successfully deleted temp file : '+ req.files.file.path );
});
var uploadurl = "http://second.server.com/upload;
var r = request.post(uploadurl, function optionalCallback (err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
});
var form = r.form();
form.append('file', fs.createReadStream(newPath));
res.send(newPath);
});
});
});

最佳答案

以下是您可以使用 busboy 执行此操作的方法(注意:这要求您当前的正文解析中间件不针对此特定路由运行,否则请求数据将已被消耗):

var Busboy = require('busboy');

// ...

app.post('/upload', function(req, res, next) {
var busboy = new Busboy({ headers: req.headers }),
foundFile = false,
uploadurl = 'http://second.server.com/upload',
form,
r;

busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
if (foundFile || fieldname !== 'file')
return file.resume(); // skip files we're not working with

foundFile = true;

r = request.post(uploadurl, function(err, httpResponse, body) {
if (err)
return console.error('upload failed:', err);
console.log('Upload successful! Server responded with:', body);
});

form = r.form();
form.append('file', file);
}).on('finish', function() {
res.send('File ' + (foundFile ? '' : 'not ') + 'transferred');
});

req.pipe(busboy);
});

关于Node.js & 请求模块 : Start upload from a readable stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25932871/

24 4 0