我正在使用carrierwave_direct,它将文件直接上传到S3。我需要将文件信息保存到数据库中 - 例如文件类型和大小。好奇最好的方法是什么?
问问题
1319 次
2 回答
1
如该线程所述,最佳方法是使用head_object方法,该方法不下载文件本身的内容。
sdk-for-ruby 文档: HEAD 操作从对象中检索元数据而不返回对象本身。如果您只对对象的元数据感兴趣,此操作很有用。要使用 HEAD,您必须对对象具有 READ 访问权限。
因此,对于 file_size 和 file_type 您可以:
require 'aws-sdk-s3'
s3 = Aws::S3::Client.new(
region: 'us-east-1', #or any other region
access_key_id: AWS_ACCESS_KEY_ID,
secret_access_key: AWS_SECRET_ACCESS_KEY
)
res = s3.head_object(bucket: bucket_name, key: object_key)
file_size = res[:content_length]
file_type = res[:content_type]
于 2020-09-07T21:59:50.530 回答
0
最好的方法是使用imagemagick identify 命令。就在您保存文件之前/之后,您需要计算它的大小。该文件必须是本地的(因此如果它已经在 S3 上,您必须再次下载它):
identify the-image.jpg
#=> rose.jpg JPEG 640x480 DirectClass 87kb 0.050u 0:01
它将输出一个您必须解析的字符串。RMagick 有一个 api,它会自动为您提供宽度/高度/类型,但我似乎找不到它(这可能会有所帮助:RMagick 返回 nil 读取 JPEG)。
于 2012-07-25T04:21:46.070 回答