2

ファイルを添付してJSONをRailsサーバーに投稿する方法を知っている人はいますか? コンテンツは base64 でエンコードされますか? マルチパート? 正直なところ、ここで役立つものは何もわかりません。アイデアは、ファイルが添付されたJSONをRails APIに投稿し、JSONを取得してファイルを適切に保存するRails(ペーパークリップを使用すると完璧です)をクライアントに持たせることです。前もって感謝します

4

2 に答える 2

2

これが私がこの問題を解決した方法です。まず、jsonコンテンツ内にファイルをアップロードするためのrakeタスクを作成しました。

desc "Tests JSON uploads with attached files on multipart formats"
task :picture => :environment do
    file = File.open(Rails.root.join('lib', 'assets', 'photo.jpg'))

    data = {title: "Something", description: "Else", file_content: Base64.encode64(file.read)}.to_json
    req = Net::HTTP::Post.new("/users.json", {"Content-Type" => "application/json", 'Accept' => '*/*'})
    req.body = data

    response = Net::HTTP.new("localhost", "3000").start {|http| http.request(req) }
    puts response.body
  end

そして、次のように、私のRailsアプリのコントローラー/モデルでこれを取得しました:

params[:user] = JSON.parse(request.body.read)

...

class User < ActiveRecord::Base
  ...

    has_attached_file :picture, formats: {medium: "300x300#", thumb: "100#100"}


    def file_content=(c)
      filename = "#{Time.now.to_f.to_s.gsub('.', '_')}.jpg"
      File.open("/tmp/#{filename}", 'wb') {|f| f.write(Base64.decode64(c).strip) }
      self.picture = File.open("/tmp/#{filename}", 'r')
    end
end
于 2013-01-24T02:29:32.247 に答える
0

JSON はデータのシリアライズ形式です。データまたはファイルをシリアル化されたオブジェクトのデータとしてアップロードするための標準的なパターンはありません。JSON では、データ フィールドが基本的なオブジェクトであることが想定されているため、ファイルの Base64 エンコーディングを使用して文字列に変換することをお勧めします。

構造は自由に定義できますが、それを処理するのはあなたの責任です。

于 2013-01-23T14:05:21.473 に答える