简体   繁体   English

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

[英]Uploading a remote file url from Rails Console with Carrierwave

I just wanted to know how one would go about uploading a remote file url using Carrierwave in the Rails console. 我只是想知道如何使用Rails控制台中的Carrierwave上传远程文件url。

I tried the following without any luck. 我没有运气就尝试了以下方法。 I presume it's not processing the Uploader? 我认为它没有处理上传器?

user = User.first
user.remote_avatar_url = "http://www.image.com/file.jpg"
user.save

Many thanks 非常感谢

Take a look at the ' Uploading files from a remote location ' section on this page https://github.com/carrierwaveuploader/carrierwave 看一下此页面上的“ 从远程位置上传文件 ”部分https://github.com/carrierwaveuploader/carrierwave

CarrierWave should throw an error if the url of the location is invalid 如果位置的网址无效,则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

Or if it's an unknown host: 或者,如果它是未知主机:

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

Please also note that if you want to download remote images you should prefix the attribute with remote_ and suffix it with _url , as shown in the example 还请注意,如果要下载远程图像,则应在属性remote_加上remote_并在其后缀_url ,如示例所示

user = User.first
user.remote_avatar = File.open(FILE_LOCATION)
user.save

FILE_LOCATION can be FILE_LOCATION可以是

File.join(Rails.root, '/files/png-sample.png')

if file is found in a folder 'files' in rails project 如果在rails项目的文件夹“文件”中找到文件

I was facing the same problem. 我面临着同样的问题。 and the issue might be http is redirecting to https. 可能是http正在重定向到https。 So I replaced them using gsub as follows: 因此,我使用gsub替换了它们,如下所示:

image.remote_image_url = remote_image_url.gsub('http://','https://')
image.save!

this should most probably solve the problem. 这最有可能解决问题。

I have had problems with remote_avatar_url not uploading the image or throwing any errors. 我遇到remote_avatar_url无法上传图像或引发任何错误的问题。 For me, as far as I can tell, it was because I set the following in my model. 据我所知,这是因为我在模型中设置了以下内容。

attr_accessor :remote_avatar_url

Carrierwave covers this for you, and although I don't understand why, setting it yourself buggers things up. Carrierwave可以为您解决这个问题,尽管我不明白为什么,但是自行设置它会使事情烦恼。

Is work as: 是作为:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM