2013-06-04 36 views
29

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

我试过以下没有任何运气。我认为它没有处理上传器?

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

非常感谢

+1

这是正确的语法。你的development.log是什么意思? –

+1

当然假设用户'mounts_uploader:avatar' –

+0

谢谢你回应杰西。我是用户mount_uploader:头像,AvatarUploader。我的日志实际上没有显示任何内容。我肯定错过了什么。它通过浏览器正常工作。 –

回答

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

FILE_LOCATION可以

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

如果文件夹中的 '文件' 中发现在Rails项目

+0

问题是如何从REMOTE LOCATION(远程URL)上传文件。不是我系统上的文件。 –

+1

如果是这样,那么只需使用'user.remote_avatar_url =“www.example.com/image.jpg'这个方法,Carrierwave会直接下载这个文件并添加到你的应用程序中 –

15

看看在“上传文件从远程位置'此页https://github.com/carrierwaveuploader/carrierwave

如果该位置的URL是无效的

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 

或者CarrierWave应该抛出一个错误,如果它是一个未知的主机:

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,如示例中所示

0

作为:

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 
2

我正面临同样的问题。并且问题可能是http重定向到https。所以我用gsub替换它们如下:

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

这应该很可能解决了这个问题。

0

我有remote_avatar_url没有上传图像或抛出任何错误的问题。就我而言,就我而言,这是因为我在我的模型中设置了以下内容。

attr_accessor :remote_avatar_url 

Carrierwave为您覆盖了这一点,虽然我不明白为什么,自己设置它会让事情变得更糟。

+0

如果你这样做,它会本质,覆盖carrierwave的'remote_avatar_url'声明。 – counterbeing