web-dev-qa-db-ja.com

Rails Console with CarrierwaveからのリモートファイルURLのアップロード

RailsコンソールでCarrierwaveを使用してリモートファイルのURLをアップロードする方法を知りたいだけです。

私は運なしで以下を試しました。アップローダーを処理していないと思いますか?

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

どうもありがとう

34

このページの「リモートロケーションからのファイルのアップロード」セクションをご覧ください 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を付加する必要があることに注意してください

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

FILE_LOCATIONは

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

Railsプロジェクトのフォルダー 'files'でファイルが見つかった場合

6
Oss

私は同じ問題に直面していました。問題は、httpがhttpsにリダイレクトされていることです。そこで、次のようにgsubを使用してそれらを置き換えました。

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

これはおそらく問題を解決するはずです。

5
Subhash Chandra

仕事として:

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はこれをあなたのためにカバーします、そして、私は理由を理解しませんが、自分でそれを設定することは物事を盗みます。

0
hellion