Node.js&;请求模块:从可读流开始上载
当用户在我的node.js服务器上上载文件时,我需要将同一文件上载到另一台服务器 我想知道是否可以开始将上传的部分发送到第二台服务器,而不必等待文件已完全上传到node.js服务器上 我正在使用请求模块上传到第二台服务器 下面的代码等待用户完成上传后再开始第二次上传(尽管我不是100%确定):Node.js&;请求模块:从可读流开始上载,node.js,file-upload,request,Node.js,File Upload,Request,当用户在我的node.js服务器上上载文件时,我需要将同一文件上载到另一台服务器 我想知道是否可以开始将上传的部分发送到第二台服务器,而不必等待文件已完全上传到node.js服务器上 我正在使用请求模块上传到第二台服务器 下面的代码等待用户完成上传后再开始第二次上传(尽管我不是100%确定): 以下是您可以使用的方法(注意:这要求您当前的主体解析中间件不针对此特定路由运行,否则请求数据将已被消耗): 谢谢你的回答。由于我对node.js和express安装相对较新,您能解释一下如何绕过expre
以下是您可以使用的方法(注意:这要求您当前的主体解析中间件不针对此特定路由运行,否则请求数据将已被消耗):
谢谢你的回答。由于我对node.js和express安装相对较新,您能解释一下如何绕过express body解析器来完成这条路线吗?或者有没有办法用我当前的代码实现这一点(我看到请求模块有一些管道功能,
req.files.file.path
是一个可读的流。而且您的代码似乎没有将文件保存在主服务器上?
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);
});
});
});
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);
});