我昨天发布了一个关于如何通过JSON API发布文件的问题:
Posting JSON with file content on Ruby / Rails
但是我无法确切地找到我想要的东西,所以我尝试了以下方法:
1)我写了一个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
所以,问题是:我是重新发明轮子还是这是正确的方法?
BTW:它有效,我只需要知道这是否是通过json上传文件的约定。
答案 0 :(得分:0)
JSON是一种数据序列化格式。将数据或文件作为序列化对象中的数据上载没有标准模式。 JSON期望数据字段将是基本对象,因此您可能希望使用文件的Base64编码将其转换为字符串。
您可以自由地定义您想要的结构,并且您负责处理它。