REST调用将文件上传到plUpload

时间:2016-02-11 22:10:20

标签: curl upload plupload postman chunked

我正在使用Postman拦截来自Chrome的REST调用。我正在通过plupload js模块上传一个文件,它似乎从UI工作正常,但在Postman或curl中都不起作用。

在Postman中,拦截器将其记录为具有原始主体的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

我在Postman中保存了截获的POST,然后重新完成了相同的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

以下是从chrome dev工具复制的curl语句:

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"}

Postman在服务器上创建一个无标题的空文件,curl使用正确的名称创建文件,但它也是空的。

您对如何调试有任何建议吗?似乎curl语句中缺少文件位置,但我在使用-F @MOCK_DATA_20.csv附加路径时遇到了困难

1 个答案:

答案 0 :(得分:0)

以下curl语句将使用正确的标题上传文件。根据您的变量,可能需要修改--form部分以进行上传。对我而言,file是文件内容,namefileName被忽略(但保留),filename是文件的名称。

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

在python中:https://gist.github.com/nitrocode/bd839676e76144a83b6def30e53b2afd