我怎样才能使文件上传保持你原来的“内容类型”到 Amazon S3?
How can I to make upload of file maintain your original `Content Type` to Amazon S3?
TL;DR
我如何才能上传图片并保持其原始状态 Content Type
或者生成签名或 public 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 之前上传的具有正确内容类型的文件。
# 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"
) 不正确
我需要将它发送到另一个服务,并使用正确的 Content-Type 上传 URL。
那么,我如何才能上传图像并保持其原始状态 Content Type
,或者生成签名或 public URL 以强制我的文件类型正确?
您可以在接受选项散列的存储桶实例上使用 put_object
方法,其中之一是 content-type (Reference):
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
TL;DR
我如何才能上传图片并保持其原始状态 Content Type
或者生成签名或 public 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 之前上传的具有正确内容类型的文件。
# 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"
) 不正确
我需要将它发送到另一个服务,并使用正确的 Content-Type 上传 URL。
那么,我如何才能上传图像并保持其原始状态 Content Type
,或者生成签名或 public URL 以强制我的文件类型正确?
您可以在接受选项散列的存储桶实例上使用 put_object
方法,其中之一是 content-type (Reference):
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