2

有谁知道如何将 JSON 发布到带有附加文件的 Rails 服务器?内容会被base64编码吗?多部分?老实说,我不知道,也没有真正找到任何可以帮助的东西。想法是让客户端将 JSON 发布到带有附加文件的 Rails API,并让 Rails(带有回形针将是完美的)获取 JSON 并正确保存文件。提前致谢

4

2 回答 2

2

这是我解决这个问题的方法。首先,我创建了一个 rake 任务来上传 json 内容中的文件:

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 回答