我只是想知道如何在 Rails 控制台中使用 Carrierwave 上传远程文件 url。
我尝试了以下没有任何运气。我想它没有处理上传器?
user = User.first
user.remote_avatar_url = "http://www.image.com/file.jpg"
user.save
非常感谢
我只是想知道如何在 Rails 控制台中使用 Carrierwave 上传远程文件 url。
我尝试了以下没有任何运气。我想它没有处理上传器?
user = User.first
user.remote_avatar_url = "http://www.image.com/file.jpg"
user.save
非常感谢
查看此页面上的“从远程位置上传文件”部分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
或者,如果它是未知主机:
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
另请注意,如果您要下载远程图像,则应在属性前加上remote_
,后缀为_url
,如示例所示
user = User.first
user.remote_avatar = File.open(FILE_LOCATION)
user.save
FILE_LOCATION 可以
File.join(Rails.root, '/files/png-sample.png')
如果在 rails 项目的文件夹“文件”中找到文件
我面临着同样的问题。问题可能是 http 正在重定向到 https。所以我使用 gsub 替换了它们,如下所示:
image.remote_image_url = remote_image_url.gsub('http://','https://')
image.save!
这应该很可能解决问题。
是作为:
url='http://host.domain/file.jpg'
time=Time.now.to_i.to_s
myfile=IO.sysopen("tmp/"+time+"_img."+url.split(".").last,"wb+")
tmp_img=IO.new(myfile,"wb")
tmp_img.write open(URI.encode(url)).read
if File.exist?("tmp/"+time+"_img."+url.split(".").last)
"tmp/"+time+"_img."+url.split(".").last
image = ActionDispatch::Http::UploadedFile.new(:tempfile => tmp_img, :filename => File.basename(tmp_img))
else
image=nil
end
@your_model.image=image
@your_model.save
我遇到了 remote_avatar_url 没有上传图像或抛出任何错误的问题。对我来说,据我所知,这是因为我在模型中设置了以下内容。
attr_accessor :remote_avatar_url
Carrierwave 为您介绍了这一点,虽然我不明白为什么,但您自己设置它会搞砸。