簡體   English   中英

如何通過NodeJS將文件上傳到S3並跟蹤瀏覽器的進度?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM