【发布时间】:2014-09-15 06:19:37
【问题描述】:
我有一个Image 模型,它需要我在保存图像之前设置一些数据,因为我根据模型中的一些数据确定将图像上传到哪里以及命名它的名称。现在我正在尝试做:
# ImagesController sets up data
img = Image.new
img.imageable = user
phashion_img = Phashion::Image.new(file.path)
img.image_hash = phashion_img.fingerprint.to_s
img.batch = img.latest_batch + 1
img.extension = 'jpg'
img.height = 640
img.width = 640
# ImageUploader uses it
version :original do
def full_filename
"#{model.image_hash}/orig/#{alnum_encode(model.imageable.id)}.#{model.extension}"
end
end
我在尝试将上传的图片传递到上传器时遇到了问题。
img.uploader.store! file 给我错误wrong number of arguments (1 for 0)
img.uploader.store! file.tempfile 给我You are not allowed to upload "" files, allowed types: jpg, jpeg, gif, png
供参考,file 是:
#<ActionDispatch::Http::UploadedFile:0x00000109ccdb70 @tempfile=#<Tempfile:/var/folders/lx/xk8vzr4s0fdd_m5w0syftfl80000gn/T/RackMultipart20140723-28731-1b5weu8>, @original_filename="20140522_164844.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[images_attributes][0][uploader]\"; filename=\"20140522_164844.jpg\"\r\nContent-Type: image/jpeg\r\n">
这将使 file.tempfile:
#<Tempfile:/var/folders/lx/xk8vzr4s0fdd_m5w0syftfl80000gn/T/RackMultipart20140723-28731-1b5weu8>
有什么方法可以将ActionDispatch::Http::UploadedFile 或Tempfile 这些对象中的任何一个传递给Carrierwave 上传器?我可以对它们进行一些转换,以便上传者可以接受其中之一?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 carrierwave image-uploading