7

私はREST APIに取り組んでおり、ユーザーの写真をアップロードしようとしています:

  • ぶどうマイクロフレームワーク
  • paperclip gem が機能していません。このエラーが表示されます
  • レールのバージョンは 3.2.8 です

No handler found for #<Hashie::Mash filename="user.png" head="Content-Disposition: form-data; name=\"picture\"; filename=\"user.png\"\r\nContent-Type: image/png\r\n" name="picture" tempfile=#<File:/var/folders/7g/b_rgx2c909vf8dpk2v00r7r80000gn/T/RackMultipart20121228-52105-43ered> type="image/png">

コントローラーでペーパークリップをテストしてみましたが、機能しましたが、グレープ API 経由でアップロードしようとすると機能しません。投稿ヘッダーは multipart/form-data です

アップロード用の私のコードはこれです

 user = User.find(20) 
 user.picture = params[:picture] 
 user.save! 

グレープ経由でファイルをアップロードできない場合、REST API経由でファイルをアップロードする別の方法はありますか?

4

4 に答える 4

17

@ahmad-sherif ソリューションは機能しますが、original_filename (および拡張子) が失われ、プリプロセッサとバリデータをプローブに提供できます。ActionDispatch::Http::UploadedFile次のように使用できます。

  desc "Update image"
  params do
    requires :id, :type => String, :desc => "ID."
    requires :image, :type => Rack::Multipart::UploadedFile, :desc => "Image file."
  end
  post :image do
    new_file = ActionDispatch::Http::UploadedFile.new(params[:image])
    object = SomeObject.find(params[:id])
    object.image = new_file
    object.save
  end
于 2013-06-24T12:46:20.197 に答える
8

おそらく、これを行うためのより一貫した方法は、Hashie::Mash のペーパークリップ アダプターを定義することです。

module Paperclip
  class HashieMashUploadedFileAdapter < AbstractAdapter

    def initialize(target)
      @tempfile, @content_type, @size = target.tempfile, target.type, target.tempfile.size
      self.original_filename = target.filename
    end

  end
end

Paperclip.io_adapters.register Paperclip::HashieMashUploadedFileAdapter do |target|
  target.is_a? Hashie::Mash
end

「透過的に」使用する

 user = User.find(20) 
 user.picture = params[:picture] 
 user.save! 

ウィキに追加 - https://github.com/intridea/grape/wiki/Uploaded-file-and-paperclip

于 2013-11-16T01:35:05.047 に答える
2

このように、Paperclip がオブジェクトのアダプターをFile取得したので、取得したオブジェクトを渡すことができます。params[:picture][:tempfile]File

user.picture = params[:picture][:tempfile]
user.picture_file_name = params[:picture][:filename] # Preserve the original file name
于 2012-12-28T12:49:29.787 に答える