1
試圖流上傳使用船長和船長-S3使用此代碼內存緩衝器填滿時I流上傳文件時,雖然通過一個磁盤存儲位置PARAM
image_upload : function (req,res) {
// depends on bodyparser:skipper in confing/http.js
console.log("Uploading image .. ");
req.file('image')
.upload({
adapter: require('skipper-s3'),
key: KEY,
secret: SECRET,
bucket: 'mybucket',
tmpdir: 'tmp/s3-multiparts'
}, function whenDone(err, uploadedFiles) {
if (err){
return res.negotiate(err);
} else {
dict = {
files: uploadedFiles,
textParams: req.params.all()
}
return res.ok(dict);
}
}
);
};
我有2個問題,S3:
首先:當我嘗試上傳一些文件,我可以看到,這個文件緩存在內存中,而不是僅僅緩存到磁盤(路徑添加到選項)。
其實這是一個很大的問題,因爲有許多用戶同時上傳
二在我的記憶將填補如此之快:我的應用程序崩潰時上傳比5MBs大,給我這個錯誤
events.js:85 throw er; // Unhandled 'error' event ^ Error: Request aborted at IncomingMessage.onReqAborted (~Desktop/myApp/node_modules/sails/node_modules/skipper/node_modules/multiparty/index.js:175:17) at IncomingMessage.emit (events.js:104:17) at abortIncoming (_http_server.js:279:11) at Socket.serverSocketCloseListener (_http_server.js:292:5) at Socket.emit (events.js:129:20) at TCP.close (net.js:485:12)
感謝您的回答!我嘗試了使用和不使用tmpDir,它沒有區別,它不斷加載/緩衝上傳的文件到內存中 – securecurve
@securcurve從隊長文檔引用,不知道它是否有任何幫助; >緩衝多部分請求的目錄的路徑可以放在頭上。亞馬遜要求發送到其分段上傳API的「部分」的大小至少爲5MB,因此該目錄用於對數據塊進行排隊,直到累積足夠大的有效負載。默認是.tmp/s3-upload-part-queue(從節點進程的當前工作目錄中解析出來,例如你的應用) – MjZac
也許,你可以避免使用'skipper-s3'並將文件寫入磁盤,然後使用' aws-sdk'用於上傳到S3 – MjZac