【已解决】Mac中Postman去POST实现文件上传时出错:HTTP 415 Unsupported Media Type

2017-08-10 10:41:05来源:https://www.crifan.com/mac_postman_post_upload_file_error_ht作者:在路上人点击

分享

去调试一个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


参考:


java – Error 415 Unsupported Media Type: POST not reaching REST if JSON, but it does if XML – Stack Overflow


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


然后才可以正常上传文件。


具体的原因,暂未深究。有空再说。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台