ファイルを S3 に直接アップロードするcarrierwave_direct を使用しています。ファイルの種類やサイズなど、ファイル情報をデータベースに永続化する必要があります。これを行う最善の方法は何ですか?
質問する
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 識別コマンドを使用することです。ファイルを保存する直前/直後に、そのサイズを計算する必要があります。ファイルはローカルである必要があります (すでに S3 にある場合は、再度ダウンロードする必要があります)。
identify the-image.jpg
#=> rose.jpg JPEG 640x480 DirectClass 87kb 0.050u 0:01
解析する必要がある文字列を出力します。RMagickには、幅/高さ/タイプを自動的に提供するAPIがありますが、それを見つけることができないようです(これは役立つかもしれません: RMagickは JPEG を読み取る nil を返します)。
于 2012-07-25T04:21:46.070 に答える