2012-07-09 18 views
8

Ho creato diversi apis in djangorestframework. Questo potrei testare entrambi con il modulo html dell'api come con l'arricciatura nella riga di comando.caricare l'immagine in imagefield con djangorestframework utilizzando json e testare questo con CURL

Ora ho una API per un modello con uno fuori dai campi un ImageField.

Non riesco a capire quale comando di arricciatura utilizzare. Utilizzando la sintassi che ho usato prima di azioni fot postali in formato JSON, sarebbe:

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/ 

ma in questo caso la foto non verrà salvata e lasciata vuota (la foto è un campo opzionale)

aggiunta -T /home/michel/test.jpg Viene visualizzato un messaggio di errore che dice che 127.0.0.1:800/api/v1/test.jpg non esiste come url.

Nella forma html test di djangorestframework, tutto funziona correttamente.

Utilizzando l'opzione -F, si dice che posso fare solo 1 richiesta alla volta ... ho anche rimosso il tipo di dati da dati binario

Qualcuno può aiutarmi come rendere questo Montante Flessione sia con il immagine e gli altri dati in json in 1 comando.

risposta

11

Dopo un lungo puzzle, questo sembra fare il trucco:

  • mettere tutti gli argomenti JSON in separati -F argomenti
  • utilizzare solo l'intestazione Accept (non Content-Type)
  • e specificare il tipo di immagine
  • Utilizzare @ per indicare il file locale da caricare

    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/ 
    

A proposito, so che tutto questo si trova sul sito della documentazione di ricciolo, ma appena perso un esempio di tutte quelle cose insieme perché ci sono un sacco di opzioni da provare.

+1

Cosa sto sbagliando? '$ curl -X POST -S -H" Accept-Language: en-it "-H 'Accetta: application/json' \ -F" name = Avatar "\ -F" username = avatar "\ -F "password = A1234567" \ -F "[email protected]" \ -F "token = 748e14e32ce165d06365d3c9a00cee3f" \ -F "avatar = @/home/moreno/Immagini/avatar004.jpg; type = image/jpg "127.0.0.1: 8000/api/v1/users/register /' response 400 '{" username ": [" Questo campo è obbligatorio. "]," password ": [" Questo campo è obbligatorio. "]," nome ": [" Questo campo è obbligatorio. "]," avatar ": [" Nessun file è stato inviato. "]," email ": [" Questo campo è obbligatorio. "]}' – Moreno

+0

manca uno dei reuired campi. Devi usare -u davanti al nome utente, non -F (a meno che non sia anche un campo nell'api, di quello che devi usare entrambi) –

+0

@ michel-iamit grazie. Ho deciso di inviare le immagini come un campo base64 ad esempio: "arricciatura -H" Autorizzazione: JWT ey ... 5U "-d" nome = Nome utente & nomeutente=utente&[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