簡體   English   中英

如何使文件上傳保持您原來的“內容類型”到 Amazon S3?

[英]How can I to make upload of file maintain your original `Content Type` to Amazon S3?

TL;博士

如何上傳圖像並維護其原始Content Type ,或者生成簽名或公共 URL 以強制我的文件類型正確?

我再解釋一下:

我在 Rails 應用程序中遇到了 S3 問題(我真的在使用Minio ,它與 S3 協議兼容)

gem 'aws-sdk-s3', '~> 1.96'

我創建了以下方法來處理上傳的文件(在 Rails App 中)並將其發送到Minio

def upload_file(file)
  object_key = "#{Time.now.to_i}-#{file.original_filename}"
  object = @s3_bucket.object(object_key)
  object.upload_file(Pathname.new(file.path))
  
  object
end

這是我在發送到 Minio 之前上傳的具有正確 Content-Type 的文件。

# file
#<ActionDispatch::Http::UploadedFile:0x00007f47918ef708
 @content_type="image/jpeg",
 @headers=
  "Content-Disposition: form-data; name=\"images[]\"; filename=\"image_test.jpg\"\r\nContent-Type: image/jpeg\r\n",
 @original_filename="image_test.jpg",
 @tempfile=#<File:/tmp/RackMultipart20220120-9-gc3x7n.jpg>>

這是我的文件,Minio 上的類型( "binary/octet-stream" )不正確

Imagens no Minio como arquivo binário

我需要將它發送到另一個服務,並使用正確的 Content-Type 獲取上傳 URL。

那么,如何上傳圖像並維護其原始Content Type ,或者生成一個簽名或公共 URL 來強制我的文件使用正確的類型?

您可以在接受 hash 選項的存儲桶實例上使用put_object方法,其中之一是內容類型( 參考):

def upload_file(file)
  object_key = "#{Time.now.to_i}-#{file.original_filename}"
  @s3_bucket.put_object({ 
    key: object_key, 
    body: Pathname.new(file.path),
    content_type: "some/content_type" 
  })
end

暫無
暫無

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

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