簡體   English   中英

上傳后立即獲取上傳的 S3 文件的版本 ID?

[英]Get version ID of uploaded S3 file right after upload?

我正在處理不可避免的問題,即用戶能夠通過 JavaScript S3 上傳覆蓋我存儲桶中的文件。

上傳文件后,假設我啟用了版本控制,有沒有辦法獲取原始版本 ID,以便我可以將其存儲在我的數據庫中,以便稍后在顯示該文件時檢索?

這是我當前的上傳代碼:

s3.upload(params).on('httpUploadProgress', function(evt) {
                var uploaded = Math.round(evt.loaded / evt.total * 100);
                console.log(`File uploaded: ${uploaded}%`);
            }).send(function(err, data) {
                if(err){
                    alert(err);
                } else {
                    alert('File is uploaded successfully!');
                    console.log(data);
                }
            });

我在數據響應中沒有看到任何版本 ID,因為它似乎在響應標頭中。 有沒有辦法從那里提取它?

你是對的; 您的代碼無權訪問以前/原始的versionId.

我不知道您的確切要求,但我看到了兩種方法:

  1. 在使用返回data.VersionIds3.headObject upload之前檢查文件元數據。 如果文件不存在,也沒關系; 否則,您可以將原始版本 ID 保存在數據庫中。

  2. 根本不要將版本保存在數據庫中,並在文件從 S3 顯示時使用listObjectVersions獲取它們。

我能夠使用以下代碼在上傳后立即檢索原始版本 ID(它上傳圖像,然后在使用 listObjectVersions 后立即獲取版本):

s3.upload(params).on('httpUploadProgress', function(evt) {
                var uploaded = Math.round(evt.loaded / evt.total * 100);
                console.log(`File uploaded: ${uploaded}%`);
            }).send(function(err, data) {
                if(err){
                    alert(err);
                } else {
                    alert('File is uploaded successfully!');
                    console.log(data);
                    var params = {
                      Bucket: "mybucket", 
                      Prefix: "images/path-to-image.jpg"
                     };
                     s3.listObjectVersions(params, function(err, data) {
                       var versionId = data["Versions"][0]["VersionId"];
                       alert(versionId);
                   });
                }
            });

請務必在您的存儲桶策略中啟用列表 object 版本:

{
        "Sid": "Statement2",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:ListBucketVersions",
        "Resource": "arn:aws:s3:::mybucket"
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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