1

ファイルを S3 に直接アップロードするcarrierwave_direct を使用しています。ファイルの種類やサイズなど、ファイル情報をデータベースに永続化する必要があります。これを行う最善の方法は何ですか?

4

2 に答える 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 に答える