使用Carrierwave从Rails控制台上载远程文件URL

Was*_*per 35 ruby-on-rails carrierwave ruby-on-rails-3.2

我只是想知道如何在Rails控制台中使用Carrierwave上传远程文件URL.

我试了以下没有任何运气.我认为它不处理上传器?

user = User.first
user.remote_avatar_url = "http://www.image.com/file.jpg"
user.save
Run Code Online (Sandbox Code Playgroud)

非常感谢

Koo*_*per 20

请查看此页面上的" 从远程位置上传文件 "部分https://github.com/carrierwaveuploader/carrierwave

如果位置的url无效,CarrierWave应该抛出错误

2.1.3 :015 > image.remote_image_url = "http"
 => "http"
2.1.3 :016 > image.save!
   (0.2ms)  BEGIN
   (0.2ms)  ROLLBACK
ActiveRecord::RecordInvalid: Validation failed: Image trying to download a file which is not served over HTTP
Run Code Online (Sandbox Code Playgroud)

或者,如果它是一个未知的主机:

2.1.3 :017 > image.remote_image_url = "http://foobar"
=> "http://foobar"
2.1.3 :018 > image.save!
   (0.4ms)  BEGIN
   (0.4ms)  ROLLBACK
ActiveRecord::RecordInvalid: Validation failed: Image could not download file: getaddrinfo: nodename nor servname provided, or not known
Run Code Online (Sandbox Code Playgroud)

另请注意,如果要下载远程图像,则应在属性前加上remote_后缀_url,如示例所示


Oss*_*Oss 5

user = User.first
user.remote_avatar = File.open(FILE_LOCATION)
user.save
Run Code Online (Sandbox Code Playgroud)

FILE_LOCATION可以

File.join(Rails.root, '/files/png-sample.png')
Run Code Online (Sandbox Code Playgroud)

如果在rails项目的文件夹'files'中找到文件


Sub*_*dra 5

我面临着同样的问题。可能是http正在重定向到https。因此,我使用gsub替换了它们,如下所示:

image.remote_image_url = remote_image_url.gsub('http://','https://')
image.save!
Run Code Online (Sandbox Code Playgroud)

这最有可能解决问题。