去调试一个Java写的上传(图片)文件的一个REST接口:
POST 192.168.0.128:81/ucows/upload/upload/cowImage/1111-11-cs/right |
然后设置headers
Authorization: Bearer 6c9f198878cb42e6aad83fecbb598d10_8a9bfdab5a21ca27015a21d72fb20000 Content-Type: application/json; charset=UTF-8 |
此处设置了body中是form-data,类型为File,且上传了一个jpg图片文件:
但是:
Windows中的POSTMAN,是可以正常的,服务器可以接收到正常的调用。
但是Mac中的PostMan却会出错:
{ "code": 415, "message": "HTTP 415 Unsupported Media Type" } |
搜:
postman file HTTP 415 Unsupported Media Type
参考:
Content Type of file uploaded in multipart/form-data request · Issue #271 · jakubroztocil/httpie
Post file/blob using multipart formdata ? · Issue #100 · matthew-andrews/isomorphic-fetch
加上:
Accept: application/json
结果问题依旧,还是415错误。
且有时候会返回html的错误内容:
php – "Unsupported media type" when PUTing to Apigility with Postman – Stack Overflow
觉得此处的:
content-type好像有点不对,
因为此处上传的是文件(的二进制数据?)
所以至少Content-Type不是application/json
所以去搜,需要搞清楚,上传file的时候,Content-Type应该是什么:
upload file formdata content-type
参考:
How does HTTP file upload work? – Stack Overflow
上传文件时,(Content-Type)的文件编码enctype一般有三种值:
- x-www-urlencoded
- multipart/form-data
- text-plain
且看到:
Whats Content-Type value within a HTTP-Request when uploading content? – Stack Overflow
Content-Type: multipart/form-data;boundary=SOME_BOUNDARY
即:
往往还会指定对应的boundary
不知道此处设置boundary为何值?
先去加上:
multipart/form-data
试试,服务器端就可以接收到此调用(至少代码进了对应的断点了)
然后接着调试,确保文件的确可以正常上传。
好像最后还是需要加上boundary,才能正常传输文件的。
又配合后台继续调试:
对于加上boundary:
Content-Type: multipart/form-data;boundary=q273568sagdhg21358738
结果说是400 bad request:
不加上boundary的话:
Content-Type: multipart/form-data
也是400:
去掉Content-Type:
结果就可以正常上传文件了。
而对应的后台的java代码,说是就是用的普通的库和写法,不知道为何此处如果设置了
Content-Type: multipart/form-data
为何无效,而取消这个设置,就可以正常上传文件了:
原始图片:
缩略图:
【总结】
按照道理来说,如果是上传文件的话,此处的postman中的配置(加上对应的后台服务器代码的写法,好像是应该这么写)
POST xxx/xxx/upload
Headers:
Authorization: Bearer 6c9f198878cb42e6aad83fecbb598d10_8a9bfdab5a21ca27015a21d72fb20000 Content-Type: multipart/form-data;boundary=any_random_value Accept: application/json |
Body:
form-data,类型为File,然后上传文件
即可。
不过此处实际上是:
不要加上 Content-Type
然后才可以正常上传文件。
具体的原因,暂未深究。有空再说。
转载请注明:在路上 » 【已解决】Mac中Postman去POST实现文件上传时出错:HTTP 415 Unsupported Media Type