【问题标题】:Can you create a paperclip attachment directly from your S3 bucket?您可以直接从 S3 存储桶创建回形针附件吗?
【发布时间】:2012-09-10 19:22:37
【问题描述】:

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

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

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

当 Rails 控制器收到一个包含 upload_url 值的创建或更新请求时,我想在指定位置创建一个带有文件的回形针附件。

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

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

【问题讨论】:

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


    【解决方案1】:

    这取决于您对附件的建模方式(例如 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 
    

    【讨论】:

    • 谢谢。这感觉不是一个非常令人满意的解决方案,但它很可能是我唯一的选择,并且使我不必将数据传输到我的服务器并返回到 S3。
    • 我会继续寻找,但最终可能会得到这样的结果。干杯。
    • 如何将上传文件的url或者文件的数据获取到回形针附件中?
    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 2019-05-06
    • 2021-07-10
    • 2014-07-18
    • 1970-01-01
    • 2013-09-09
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多