2011-08-25 49 views
9

我正在爲Django網站創建一個RESTful api。我正在使用tastypie做這件事。我的問題是我不能設計如何通過這個API發佈圖像或文件。我的意思是,要在數據庫上創建對象,我們以json格式發佈數據。但是我怎麼能把一個文件放在那個json裏面呢?通過django和tastypie通過RESTful API發佈文件

我發現有兩種方法,其中一種是將它們轉換成Base64格式。我不想使用它,因爲在我的測試中,當轉換爲Base64時,74kb的圖像爲110kb-120kb。

所以任何人都可以解釋我如何發佈一個包含其中的文件的對象?

+0

我的叉子上有修補程序,允許通過多形式https://github.com/nisc/django-tastypie文件上傳 – nisc

回答

1

將文件序列化到JSON請求中是一種稍微笨拙的做事方式,也意味着你會失去一些Django的文件上傳自動完好性,例如在請求進入時將文件寫入內存,一旦達到特定大小,就切換到寫入磁盤。

對於文件上傳視圖,您可能希望退出tastypie,並明確寫入視圖。

然後,你既可以使用標準的多形式,(和剛剛訪問使用request.FILES像往常一樣,或(更復雜),create a view that will accept the raw file content文件

+3

在觀看tastypie我看到一個名爲ImageField的資源字段。可能是它處理文件上傳,但我不知道如何發送我的JSON文件。 –

5

看看這裏:https://github.com/toastdriven/django-tastypie/issues/42

貌似有辦法TODO這一點,但不工作得非常好。

長時間用各種解決方案玩弄(https://github.com/klipstein/django-tastypie/commit/e0f86ddffeb46c77704328a3b5899ec08e18e4ebhttps://github.com/klipstein/django-tastypie/commits/form-data)進行文件處理tastypie我來到後內如果您希望支持來自每個瀏覽器的文件上傳,則無法優雅地解決這個問題。

對此叉

https://github.com/ff0000/django-tastypie/commit/1fbc0a

+0

我真的不知道目前的狀態是什麼。我們應該以什麼方式將文件發送給tastypie? – Alper