概述
去调试一个Java写的上传(图片)文件的一个REST接口:POST 192.168.0.128:81/ucows/upload/upload/cowImage/1111-11-cs/right
然后设置headersAuthorization: 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
参考:
加上:
Accept: application/json
结果问题依旧,还是415错误。
且有时候会返回html的错误内容:
觉得此处的:
content-type好像有点不对,
因为此处上传的是文件(的二进制数据?)
所以至少Content-Type不是application/json
所以去搜,需要搞清楚,上传file的时候,Content-Type应该是什么:
upload file formdata content-type
参考:
上传文件时,(Content-Type)的文件编码enctype一般有三种值:x-www-urlencoded
multipart/form-data
text-plain
且看到:
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
然后才可以正常上传文件。
具体的原因,暂未深究。有空再说。
最后
以上就是义气豌豆为你收集整理的java上传文件 415,【已解决】Mac中Postman去POST实现文件上传时出错:HTTP 415 Unsupported Media Type...的全部内容,希望文章能够帮你解决java上传文件 415,【已解决】Mac中Postman去POST实现文件上传时出错:HTTP 415 Unsupported Media Type...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复