您可以直接从S3存储桶创建回形针附件吗?

时间:2012-09-18 13:58:38

标签: ruby-on-rails amazon-s3 paperclip

我有一个Rails应用程序,它通过公开的API与各种语言的某些移动应用程序进行交互。

移动应用程序必须将视频文件发送到Rails应用程序,但文件大小太大,无法直接发送到API以附加Paperclip。

我将文件直接上传到移动设备上的S3,然后使用与回形针附件无关的字段将上传文件的URL发送到API。

在Rails控制器获取包含upload_url值的创建或更新请求时,我想在指定的位置创建一个Paperclip附件。

我知道我可以通过从S3读取文件并再次将其存储回来创建回形针附件,但这似乎在S3上的起点和终点是相同的桶时传输了大量不必要的数据。

所以我的问题是,我可以以某种方式使用S3 gem将文件移动或重命名为Paperclip可以识别的附件吗?

1 个答案:

答案 0 :(得分: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