pup*_*eno 19 ruby-on-rails carrierwave
我需要将文件从一个载波对象复制到另一个载波对象.它们是不同的表格和不同类型的上传者.
我开始时:
user.avatar = image.content
Run Code Online (Sandbox Code Playgroud)
(其中用户和图像是模型实例,头像和内容是载波装载的上载器),有时可以工作.它似乎一直在本地工作,有文件存储,但在使用雾和s3时间歇性.
在邮件列表帖子中,我找到了这段代码:
user.avatar = image.content.file
Run Code Online (Sandbox Code Playgroud)
那时候又有效了.
到目前为止,我的工作方案是:
require "open-uri"
begin
user.avatar = open(image.url)
rescue Errno::ENOENT => e
begin
user.avatar = open(image.path)
rescue Errno::ENOENT => e
# Ok, whatever.
end
end
Run Code Online (Sandbox Code Playgroud)
这不仅难看,而且无法通过扩展验证,因为远程文件的打开不能保持扩展名(jpg,png等).
Dia*_*rat 13
也许您可以采用的一种方法是根据Carrierwave gem文档设置远程图像URL ?
user.remote_avatar_url = image.url
Run Code Online (Sandbox Code Playgroud)
从这里讨论的解决方案,我创建了简单的CopyCarrierwaveFile gem来做到这一点
用法是这样的:
original_resource = User.last
new_resource = User.new
CopyCarrierwaveFile::CopyFileService.new(original_resource, new_resource, :avatar).set_file
new_resource.save
nev_resource.avatar.url # https://...image.jpg
Run Code Online (Sandbox Code Playgroud)