3

请帮帮我...我使用回形针将画布标签(base64)中的1张图片上传到aws-s3。

我的控制器

    def create
    decoded_file = Base64.decode64(params[:photo])
      begin
        file = Tempfile.new(['test', '.jpg']) 
        file.binmode
        file.write decoded_file
        file.close
        @photo.photo =  file
        if @photo.save
          render :json => {:message => "Successfully uploaded the profile picture."}
        else
          render :json => {:message => "Failed to upload image"}
        end
      ensure
        file.unlink
      end
  end

模型

 class Photo < ActiveRecord::Base
  has_attached_file :photo, styles: { thumbnail: "150x200#"}, default_style: :thumbnail
end

和错误:

NoMethodError at /photos
===================================
> undefined method `stringify_keys' for #<String:0xb46dba14>
activerecord (4.0.0) lib/active_record/attribute_assignment.rb, line 17
4

2 回答 2

2

好吧,我想我得到了一些东西。

有2个潜在问题:

  1. 您创建的文件(带画布)可能不正确
  2. 您的@post.save功能可能不正确

我不知道帆布的东西....所以我要给你我最好的镜头@post.save

 def create
    decoded_file = Base64.decode64(params[:photo])
      begin
        file = Tempfile.new(['test', '.jpg']) 
        file.binmode
        file.write decoded_file
        file.close

        params[:photo] = file

        @photo.new(photo_params)
        if @photo.save
          render :json => {:message => "Successfully uploaded the profile picture."}
        else
          render :json => {:message => "Failed to upload image"}
        end
      ensure
        file.unlink
      end
  end

  private
  def photo_params
      params.permit(:photo)
  end
于 2013-10-15T16:30:53.867 回答
1

您是否以这种方式使用 update_attributes() 或 build() ?

更新属性(参数[:照片])

如果是这样,您应该改用它:

update_attributes(:photo => params[:photo])

希望对您有所帮助和工作。

于 2013-10-15T11:43:05.610 回答