2013-01-23 40 views
0

我昨天發佈了關於如何通過JSON API的在這裏發表文件問題:這是使用ruby通過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 

所以,問題是:我是否重新發明了輪子,還是這樣做的正確方法?

順便說一句:它的工作原理,我只需要知道這是否是通過json上傳文件的慣例。

+0

不要創建一個新的問題來顯示進度,通過編輯將您的進度附加到舊問題。這將信息保存在一個地方。 –

回答

0

JSON是一種數據序列化格式。沒有用於將數據或文件作爲數據上載到序列化對象中的標準模式。 JSON期望數據字段是基本對象,因此您可能希望使用文件的Base64編碼將其轉換爲字符串。

無論你想要什麼,你都可以自由定義你的結構,並且處理它是你的責任。

相關問題