[英]How to track upload progress to S3 using aws-sdk V3 for browser (javascript)
[英]How to upload a file to S3 via NodeJS and track progress in the browser?
在涉及文件管理以及NodeJS中沒有的概念時,我遇到了一些關於概念的問題,並且想知道是否有人可以指出我正確的方向。
我有一個上傳的隊列列表,它將根據用戶的需要同時發生(允許他們隨意暫停或刪除下載),我需要進程點擊Node服務器來調整圖像大小或根據需要操作視頻。 從這里開始,我需要Node通過S3上傳視頻或圖像,使用AWS-SDK(我設置了一個假的S3服務器進行一般的沙箱測試),當上傳時我需要在瀏覽器中跟蹤上傳的進度。
我正在使用React和服務器端渲染與Node,所以我認為必須有一種非常直接的方式來處理這種情況,但我找不到以前做過這個的人。 這里有幾個我搞砸的概念:
Server.js(核心輸入)
server.use(express.static(path.join(__dirname, 'public')));
server.use(multer({
dest: './public/temp',
limits: {
fieldNameSize: 50,
files: 1,
fields: 5,
fileSize: 1024 * 1024
},
rename: (fieldname, filename) => {
return filename;
},
onFileUploadStart: (file) => {
console.log('Starting file upload process.');
},
inMemory: true
}));
server.use(cookieParser());
server.use(bodyParser.urlencoded({ extended: true }));
server.use(bodyParser.json());
中間路線(/上傳或其他)
export function uploadContent(req, res) {
const config = {
s3ForcePathStyle: true,
accessKeyId: 'ACCESS_KEY_ID',
secretAccessKey: 'SECRET_ACCESS_KEY',
endpoint: new AWS.Endpoint('http://localhost:4567'), // TODO make live
};
const client = new AWS.S3(config);
const params = {
Key: 'Key',
Bucket: 'Bucket',
Body: fs.createReadStream(req.body.files[0])
};
client.upload(params, function uploadCallback (err, data) {
console.log(err, data);
});
}
這不起作用,因為身體解析器與路線沖突,multer也有時間(我對其他建議持開放態度)關於如何實現這一點的任何信息都會很棒。 我不是在尋找完整的代碼只是讓我走上正確道路的另一個想法。 我感謝任何幫助!
您可以在瀏覽器和Nodejs Route之間使用套接字chanel,並使用httpUploadProgress事件發出事件開始,結束和進度:
var s3obj = new AWS.S3({params: {Bucket: 'myBucket', Key: 'myKey'}});
s3obj.upload({Body: body}).
on('httpUploadProgress', function(evt) {
console.log(evt);
//Emit Here your events
}).
send(function(err, data) { console.log(err, data) });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.