2012-09-18 62 views
1

我有一個Rails應用程序,它可以通過暴露的API與各種語言的一些移動應用程序進行交互。您可以直接從S3存儲桶創建回形針附件嗎?

移動應用程序必須將視頻文件發送到Rails應用程序,但文件太大而無法將它們直接發送到API以使用Paperclip進行附加。

我在移動設備上直接將文件上傳到S3,然後使用與回形針附件無關的字段將上傳文件的URL發送到API。

在Rails控制器獲取包含upload_url值的創建或更新請求時,我想創建一個Paperclip附件,並在指定位置創建該文件。

我知道我可以通過從S3中讀取文件並將其存儲回來創建回形針附件,但這似乎是在S3上的開始點和結束點是同一個桶時傳輸大量不必要的數據。

所以我的問題是,我可以以某種方式使用S3 gem將文件移動或重命名爲Paperclip可識別的附加文件?

回答

2

這取決於您如何建模附件(如s3的路徑和url方案),但在最常見的情況下,您可以簡單地使用必須的屬性(包括文件名)創建對象upload_url值。然後,可以像上次記錄最初通過回形針創建一樣訪問上傳記錄。

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 
+0

謝謝。這不是一個非常令人滿意的解決方案,但它可能是我唯一的選擇,並且使我無需將數據傳輸到服務器並返回到S3。 – kpopper

+0

我會繼續尋找,但可能最終會有這樣的事情。乾杯。 – kpopper

+0

如何將上傳的文件或文件數據的url鏈接到回形針附件中? – rigyt

相關問題