Tôi đang tạo một ứng dụng cần tải lên một số tệp và gửi chúng thẳng lên S3. Tôi không muốn thậm chí có các tập tin tmp trên máy chủ của tôi, vì vậy tôi đang sử dụng mô-đun Knox và muốn lấy dòng thô từ Formidable và gửi nó qua Knox đến S3. Tôi đã làm điều gì đó tương tự bằng cách sử dụng Knox để tải xuống tệp bằng cách sử dụng mã này:Truy cập luồng tệp thô từ tệp tải lên có kích thước nút
knox.downloads.get(widget.download).on('response',function(sres){
res.writeHead(200, {
'Content-Type':'application/zip',
'Content-Length': sres.headers['content-length'],
'Content-Disposition':'attachment; filename=' + widget.download
});
util.pump(sres, res);
}).end();
Bây giờ tôi muốn thực hiện điều gì đó tương tự theo hướng mờ (Tải tệp lên từ trình duyệt lên S3).
Cho đến nay tôi đã viết một event handler để chụp mỗi phần dữ liệu từ nội dung tập tin đang được tải lên:
var form = new formidable.IncomingForm();
form.onPart = function(part){
if(!part.filename){
form.handlePart(part);
}else{
if(part.name == 'download'){
// Upload to download bucket
controller.putDownload(part);
}else{
// Upload to the image bucket
controller.putImage(part);
}
//res.send(sys.inspect(part));
}
}
form.parse(req, function(err, fields, files){
if(err){
res.json(err);
}else{
res.send(sys.inspect({fields:fields, files:files}), {'content-type':'text/plain'});
//controller.createWidget(res,fields,files);
}
});
controller.putDownload = function(part){
part.addListener('data', function(buffer){
knox.download.putStream(data,part.filename, function(err,s3res){
if(err)throwError(err);
else{
console.log(s3res);
}
});
})
knox.downloads.putStream(part, part.filename, function(err,s3res){
if(err)throwError(err);
else{
console.log(s3res);
}
});
}
Nhưng trường hợp dữ liệu chỉ cho tôi bộ đệm. Vì vậy, nó có thể nắm bắt các dòng chính nó và đẩy nó vào S3?
tôi đã gặp khó khăn và chuyển sang đa phần đã giải quyết vấn đề này –