【问题标题】:How to assign a remote file to Carrierwave?如何将远程文件分配给 Carrierwave?
【发布时间】:2011-06-27 19:30:40
【问题描述】:

我有以下定义的视频模型:

class Video
  require 'carrierwave/orm/activerecord'
  mount_uploader :attachment, VideoUploader
  mount_uploader :attachment_thumbnail, VideoThumbnailUploader
  ...
end

当我上传视频文件时。它还将文件发送到我们的编码服务 Zencoder,该服务对视频文件进行编码并为其创建缩略图。

通常,我可以执行@video.attachment.url 之类的操作,它会返回视频文件的路径。我想对缩略图做同样的事情。即@video.attachment_thumbnail.url

但是,由于附件是由我们的编码服务创建的,该服务还将其上传到指定的 S3 存储桶。如何将附件分配给记录的 attachment_thumbnail 列?

我可以简单地做类似的事情吗:

@video.update_attributes(
  :attachment_thumbnail => 'https://bucket_name.s3.amazonaws.com/uploads/users/1/video/1/thumb.png'
)

是否可以将这样的文件分配给 Carrierwave?

【问题讨论】:

  • 你看railscasts,不是吗? ;) 你以前用过回形针吗?你更喜欢哪一个?
  • 嗨罗宾,试过回形针。我更喜欢载波。只是个人喜好:-)
  • 在这里查看答案。 update_column 跳过回调,允许您在不让 CarrierWave 重新上传图像的情况下更新属性。 stackoverflow.com/questions/16968658/…

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


【解决方案1】:

您可以执行以下操作:

@video.remote_attachment_thumbnail_url = 'https://bucket_name.s3.amazonaws.com/uploads/users/1/video/1/thumb.png'

但这会导致 Carrierwave 下载并重新处理文件,而不仅仅是将其制作为缩略图。如果您不打算使用 Carrierwave 的处理,那么将 URL 存储到模型上的缩略图可能比使用 Carrierwave 更有意义。

【讨论】:

  • 为什么“@video.remote_attachment_thumnail_url”会导致 Carrierwave 下载并重新处理文件?
  • 您只是告诉carrierwave 从那里抓取文件而不是上传文件。它通常用于表单中,供用户输入他们想要上传的图片的 URL。
  • ctide,我刚试过:@video.update_attributes(:attachment_thumbnail => 'bucket_name.s3.amazonaws.com/uploads/users/1/video/1/…) 我得到:CarrierWave::FormNotMultipart:CarrierWave::FormNotMultipart。我猜你不能做@video.remote_attachment_thumnail_url = 'bucket_name.s3.amazonaws.com/uploads/users/1/video/1/thumb.png',这只是一回事。还是我错过了什么?
  • 这不是一回事,remote_[uploader]_url 是一个实例方法,它告诉 Carrierwave 从该 URL 下载文件。见:github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/… line 87 另外,它不是一个属性,所以你不能通过 update_attributes 设置它。
  • 是否可以仅将远程文件分配给 CarrierWave?这意味着它不下载或重新处理,只需分配。这样我就可以这样使用助手:@video_attachment_thumbnail.url
【解决方案2】:

这对我有用,使用 CarrierWave 0.5.8

model.update_attributes(:remote_uploader_url => "http://path/to/image.jpg")

当然,为此您需要将remote_uploader_url 设置为attr_accessible

【讨论】:

    【解决方案3】:

    我也在找这个。

    zencoder 案例中的阻碍点是 Carrierwave 不会跟踪原始文件的不同文件类型版本。它只引用原始文件。

    因此,将原始文件作为 .mp4 和缩略图版本作为 .png 是行不通的。 虽然您可以拥有一个“image.png”并跟踪“thumb_png_image.png”,但您不能同时为同一个文件创建一个“thumb_jpg_image.jpg”。

    否则,您可以创建一个虚拟版本并使用条件版本控制告诉 CW 不要处理它。 由于 CW 无论如何都会创建虚拟版本但不会上传它,因此您可以让它引用与 Zencoder 返回的文件匹配的路径。但是哦,好吧...

    【讨论】:

      【解决方案4】:

      在本集结束时(7:35),Ryan Bates 在文件形式上传中添加了一个 remote_image_url:

      http://railscasts.com/episodes/253-carrierwave-file-uploads

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-09
        • 2019-06-05
        • 2021-04-09
        相关资源
        最近更新 更多