2016-02-11 7 views
0

Я использую Postman для перехвата вызовов REST из Chrome. Я загружаю файл через модуль plupload js и, похоже, отлично работает с пользовательским интерфейсом, но не работает ни в Postman, ни в curl.REST вызов для загрузки файла в plUpload

В Почтальоне перехватчик записывает его как POST с сырым телом (например 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 

Я сохранил перехваченное сообщение в Почтальон, а затем перезапустил точно такой же POST, и это бросило ошибку сообщение в своем ответе:

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 

Вот локон заявление скопирована из хром Дев инструментов:

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 

локон ответ:

{"status":"success"} 

Почтальон создает безымянный пустой файл на сервере и локон создает файл с правильным именем, но это тоже пусто.

Есть ли у вас какие-либо рекомендации относительно того, как отладить это? Кажется, что файл отсутствует в описании curl, но у меня с трудом вставлен путь с -F @MOCK_DATA_20.csv

ответ

0

Следующий оператор curl загрузит файл с правильным заголовком. Для вашей загрузки в зависимости от ваших переменных могут потребоваться изменения для участков --form. Для меня file - это содержимое файла, name и fileName были проигнорированы (но сохранены), а filename - имя файла.

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 

В питона: https://gist.github.com/nitrocode/bd839676e76144a83b6def30e53b2afd