2012-07-09 65 views
8

我在djangorestframework中製作了幾個apis。 這個我可以用命令行中的curl來測試api的html格式。使用json將圖像上傳到ima​​gefield並使用djangorestframework使用CURL進行測試

現在我有一個模型的api,一個字段的ImageField。

我找不出要使用哪個curl命令。 使用我之前JSON格式FOT後操作使用的語法,這將是:

curl -X POST -S -H 'Content-Type: application/json' -u "username:password" --data-binary '{"otherfields":"something", "photo":"/home/michel/test.jpg"}' 127.0.0.1:8000/api/v1/ 

但在這種情況下,照片不會被保存,空(照片是一個可選字段)

添加-T /home/michel/test.jpg 我收到一條錯誤消息,稱127.0.0.1:800/api/v1/test.jpg不存在爲url。

在djangorestframework的測試html表單中,一切正常。

使用-F選項,它說我只能做一次1個請求...... 我也刪除從數據類型的數據的二進制

任何人可以幫助我如何使這個捲曲後與兩個圖像和json中的其他數據在1個命令中。

回答

11

長的難題之後,這似乎這樣的伎倆:

  • 把所有的JSON參數在不同-F參數
  • 只能用頭Accept(不Content-Type
  • 並指定圖像類型
  • 使用@來指示要上傳的本地文件

    curl -X POST -S \ 
        -H 'Accept: application/json' \ 
        -u "username:password" \ 
        -F "otherfields=something" \ 
        -F "[email protected]/home/michel/test.jpg;type=image/jpg" \ 
        http://127.0.0.1:8000/api/v1/ 
    

順便說一句,我知道這一切是在捲曲的文檔站點,只是錯過了所有這些事情的例子在一起,因爲有很多的選擇嘗試。

+1

我在做什麼錯? '$ curl -X POST -S -H「Accept-Language:en-en」-H'Accept:application/json'\ -F「name = Avatar」\ -F「username = avatar」\ -F 「password = A1234567」\ -F「[email protected]」\ -F「token = 748e14e32ce165d06365d3c9a00cee3f」\ -F「avatar = @/home/moreno/Pictures/avatar004.jpg; type = image/jpg「127.0.0.1:8000/api/v1/users/register /'response 400'{」username「:[」此字段是必填項。「],」password「:[」此字段爲必填項。「],」名稱「:[」此字段爲必填項。「],」avatar「:[」沒有提交文件。「],」email「:[」該字段是必填項。「]} – Moreno 2016-03-09 15:47:58

+0

它缺少一個reuired領域。你需要在用戶名之前使用-u,而不是-F(除非它也是api中的一個字段,比你需要同時使用) – 2016-03-21 09:28:14

+0

@ michel-iamit謝謝。我決定將圖像作爲base64字段發送,例如:'curl -H「授權:JWT ey ... 5U」-d「name = User Name&username = user&email = [email protected]&password = A1234567」--data-urlencode' avatar ='「$(base64〜/ Pictures/avatar004.jpg)」''--data-urlencode'image ='「$(base64〜/ Pictures/avatar001.jpg)」''--data-urlencode'picture = ''$(base64〜/ Pictures/577383.jpg)「''http:// localhost:8000/api/v1 // register /' – Moreno 2016-03-24 19:23:28