1

公開された API を介してさまざまな言語でいくつかのモバイル アプリと対話する Rails アプリがあります。

モバイル アプリはビデオ ファイルを Rails アプリに送信する必要がありますが、ファイルのサイズが大きすぎて、API に直接送信して Paperclip で添付することはできません。

ファイルをモバイル デバイスの S3 に直接アップロードしてから、クリップの添付ファイルに関連付けられていないフィールドを使用して、アップロードされたファイルの URL を API に送信しています。

Railsコントローラーがupload_url値を含む作成または更新リクエストを取得した時点で、指定された場所にファイルを含むペーパークリップ添付ファイルを作成したいと考えています。

S3 からファイルを読み込んで再度保存することでクリップの添付ファイルを作成できることはわかっていますが、S3 の開始点と終了点が同じバケットである場合、大量の不要なデータが転送されているようです。

私の質問は、どうにかして S3 gem を使用して、ファイルを移動または名前変更して、Paperclip が認識できる添付ファイルにすることはできますか?

4

1 に答える 1

2

添付ファイルのモデリング方法(s3のパスやURLスキームなど)によって異なりますが、最も一般的なシナリオでは、upload_url値から派生する必要のある属性(ファイル名を含む)を使用してオブジェクトを簡単に作成できます。次に、アップロードレコードに、Paperclipを介して最初に作成されたかのようにアクセスできます。

1.9.3p194 :069 > u = Attachment.new
 => #<Attachment id: nil, type: nil, attachable_id: nil, attachable_type: nil, attachment_file_name: nil, attachment_content_type: nil, attachment_file_size: nil, attachment_updated_at: nil, created_at: nil, updated_at: nil> 
1.9.3p194 :070 > u.attachment_file_name = 'fdssfd.txt'
 => "fdssfd.txt" 
1.9.3p194 :071 > u.attachment
 => /system/assets/images/paperclip/development//original/fdssfd.txt 
1.9.3p194 :072 > u.save
   (0.3ms)  BEGIN
  SQL (0.5ms)  INSERT INTO `attachments` (`attachable_id`, `attachable_type`, `attachment_content_type`, `attachment_file_name`, `attachment_file_size`, `attachment_updated_at`, `created_at`, `type`, `updated_at`) VALUES (NULL, NULL, NULL, 'fdssfd.txt', NULL, NULL, '2012-09-18 14:24:26', NULL, '2012-09-18 14:24:26')
[paperclip] Saving attachments.
   (1.4ms)  COMMIT
 => true 
1.9.3p194 :073 > u.attachment
 => /system/assets/images/paperclip/development/5/original/fdssfd.txt 
于 2012-09-18T14:28:22.530 に答える