2016-02-11 3 views
0

J'utilise Postman pour intercepter les appels REST de Chrome. Je télécharge un fichier via le module plupload js et il semble fonctionner correctement avec l'interface utilisateur mais ne fonctionne pas dans Postman ou curl.Appel REST pour télécharger un fichier à plUpload

En Postman, l'intercepteur enregistrer comme POST avec un corps brut (par exemple data.txt)

------WebKitFormBoundarycatLhfxNDVGW02wa 
Content-Disposition: form-data; name="name" 

MOCK_DATA_100.csv 
------WebKitFormBoundarycatLhfxNDVGW02wa 
Content-Disposition: form-data; name="chunk" 

0 
------WebKitFormBoundarycatLhfxNDVGW02wa 
Content-Disposition: form-data; name="chunks" 

1 
------WebKitFormBoundarycatLhfxNDVGW02wa 
Content-Disposition: form-data; name="filename" 

MOCK_DATA_100.csv 
------WebKitFormBoundarycatLhfxNDVGW02wa 
Content-Disposition: form-data; name="file"; filename="MOCK_DATA_100.csv" 
Content-Type: application/vnd.ms-excel 

J'ai sauvé le POST intercepté dans Postman puis rediffusé exactement la même POST et cette erreur a généré une message dans ma réponse:

Sorry, our system is experiencing a problem. 
<br />(Error code 0) 
<br />Error "The file "MOCK_DATA_100.csv" was only partially uploaded." 
occurred at line 251 of 
../Symfony/Component/HttpFoundation/File/UploadedFile.php 

Voici la déclaration boucle copié à partir d'outils de dev chrome:

curl -k 'https://localhost/api/v1/user-contact-data/file' \ 
-H 'Pragma: no-cache' -H 'Origin: https://localhost' \ 
-H 'Accept-Encoding: gzip, deflate' \ 
-H 'Accept-Language: en-US,en;q=0.8' \ 
-H 'User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36' \ 
-H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBQR6SxZD8udgj5et' \ 
-H 'Accept: */*' \ 
-H 'Cache-Control: no-cache' \ 
-H 'Referer: https://localhost' \ 
-H 'Cookie: WBSESSID=XXXjaaqdv3g6sp3k4729fb9ibq5057p3uviib3v1ba7dd8juhvk9bm6ttv360npp8qioi9a25vs3nmra9t9l7ki43og38jb7sl3bXXX; fileName=MOCK_DATA_100.csv' \ 
-H 'Connection: keep-alive' \ 
-H 'DNT: 1' --data-binary $'------WebKitFormBoundaryBQR6SxZD8udgj5et\r\nContent-Disposition: form-data; name="name"\r\n\r\nMOCK_DATA_100.csv\r\n------WebKitFormBoundaryBQR6SxZD8udgj5et\r\nContent-Disposition: form-data; name="chunk"\r\n\r\n0\r\n------WebKitFormBoundaryBQR6SxZD8udgj5et\r\nContent-Disposition: form-data; name="chunks"\r\n\r\n1\r\n------WebKitFormBoundaryBQR6SxZD8udgj5et\r\nContent-Disposition: form-data; name="filename"\r\n\r\nMOCK_DATA_100.csv\r\n------WebKitFormBoundaryBQR6SxZD8udgj5et\r\nContent-Disposition: form-data; name="file"; filename="MOCK_DATA_100.csv"\r\nContent-Type: application/vnd.ms-excel\r\n\r\n\r\n------WebKitFormBoundaryBQR6SxZD8udgj5et--\r\n' \ 
--compressed 

réponse boucle:

{"status":"success"} 

Postman crée un fichier vide sans titre sur le serveur et boucle crée le fichier avec le nom correct mais il est aussi vide.

Avez-vous des conseils sur la façon de déboguer cela? Il semble que l'emplacement du fichier est absent de l'instruction curl mais j'ai de la difficulté à attacher le chemin avec -F @MOCK_DATA_20.csv

Répondre

0

L'instruction curl suivante téléchargera le fichier avec le titre correct. Les portions --form peuvent avoir besoin d'être modifiées pour votre téléchargement en fonction de vos variables. Pour moi, file était le contenu du fichier, name et fileName ont été ignorés (mais préservés), et filename était le nom du fichier.

MYCOOKIE='MYCOOKIE=dasdaslkdas930423840308230klasdasjlk90312' 
FILENAME='test.csv' 
TARGETURL='' 
curl -vvv '$TARGETURL' \ 
    -H 'Cookie: $MYCOOKIE; fileName=$FILENAME' \ 
    -H 'Transfer-Encoding: chunked' \ 
    --compressed \ 
    --form '[email protected]$FILENAME' \ 
    --form 'name="file"' \ 
    --form 'filename="$FILENAME"' \ 
    -k 

En python: https://gist.github.com/nitrocode/bd839676e76144a83b6def30e53b2afd