簡體   English   中英

如何使用預簽名的 URL 以及 s3 aws-sdk-ruby v3 中的標簽上傳 object

[英]How to upload an object using presigned URL along with tags in s3 aws-sdk-ruby v3

我正在嘗試使用預簽名的 URL 上傳 object。但我想上傳 object 和標簽。 正確的做法是什么?

方法一:

我嘗試了以下 ruby 代碼:

signer = Aws::S3::Presigner.new
signer.presigned_url(:put_object, bucket: bucket_name, key: url, tagging: 'taggingName=tagValue')

但這只是上傳object,並沒有添加標簽。

方法二:

我嘗試將“x-amz-tagging”header 列入白名單,並嘗試從客戶端上傳文件和 header。

Ruby 代碼:

signer = Aws::S3::Presigner.new
url = signer.presigned_url(:put_object, bucket: bucket_name, key: public_url, whitelist_headers: ['x-amz-tagging'])

客戶端代碼:

return $http({
      method: 'PUT',
      url: presigned_url,
      ignoreLoadingBar: true,
      data: file,
      headers: {
        'Content-Type': file.type,
        'x-amz-tagging': 'taggingName=tagValue'
      }
    })

但這在上傳時給我一個錯誤,說“x-amz-tagging”未簽名。

我正在使用 aws-sdk-ruby v3 (Ror)

根據文檔

object 的標記集。標記集必須編碼為 URL 查詢參數。 (例如,“Key1=Value1”)

錯誤似乎是在說同樣的話

“x-amz-tagging”未簽名。

所以當你創建URL時你需要提供什么樣的標簽和相應的值。

    PUT /example-object HTTP/1.1
    Host: example-bucket.s3.<Region>.amazonaws.com   
    Accept: */*   
    Authorization:authorization string   
    Date: Thu, 22 Sep 2016 21:58:13 GMT   
    x-amz-tagging: tag1=value1&tag2=value2

    [... bytes of object data]   
     

同一文檔頁面上的示例 6。

無論您在創建簽名的 url 時提供了什么標簽,您都可以從 url 中提取相同的標簽並將它們傳遞給x-amz-tagging

就像是

     const tag = signS3URL.tag;
     ...
     const options = {
        url: signedUrl,
        path: fileUrl,
        method: "PUT",
        headers: { "Content-Type": file.mimeType, "X-Amz-Tagging": tag }
    };
  

不過我不太擅長 JS。

最后但並非最不重要的一點是,檢查您的 cloudtrail 日志中是否存在標記 object 的錯誤。

暫無
暫無

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

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