1

私はモデルを持っています:

class RealtyPhoto < ActiveRecord::Base
  attr_accessible :name, :photo

  mount_uploader :photo, RealtyPhotoUploader

  belongs_to :realty_object
end

アップローダ:

class RealtyPhotoUploader < CarrierWave::Uploader::Base

  include CarrierWave::RMagick

  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def default_url
    [version_name, "/assets/default-flat.jpg"].compact.join('_')
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end

私は自分のコードに次のようなものを書きます:

require 'open-uri'

object = RealtyObject.last

photo = RealtyPhoto.new

photo.photo = open('http://milushov.ru/bg.jpg').read

object.realty_photos << photo

そして、その行にエラーが表示されます:

 photo.photo = open('http://milushov.ru/bg.jpg').read
ArgumentError: string contains null byte
from /home/roma/.rvm/gems/ruby-1.9.3-p327@miel/gems/carrierwave-0.7.1/lib/carrierwave/sanitized_file.rb:113:in `expand_path'

外部からファイルをダウンロードして保存する方法を知っている人はいますか? (ページ上のフォームからファイルを保存すると、すべて問題ありません)。CarrierWave Uploader を使用している可能性がありますか?

4

3 に答える 3

3

remote_column_name_urlあなたの場合 を使用してリモートURLからCarrierwaveアップロード画像photo.remote_photo_url = "url"

于 2013-01-11T09:08:33.290 に答える
2

ファイル ハンドルを閉じるのを忘れているようです。ファイルを閉じると、アプリケーションが正しく動作する可能性があります。

于 2013-01-19T12:31:10.170 に答える
1

別の方法で行うこともできます..より効率的なのは、 model[:name] = filename model.save surl = model.photo.url FileUtils.copy(filesrc,surl,derefrence=true) です。

このアプローチは基本的に、ファイルを 1 つの場所にコピーし、保存時に別の場所に 10 コピーする手間を省きます。

于 2013-01-19T12:44:39.710 に答える