去调试一个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图片文件:

java postman上传文件解析_postman

但是:

Windows中的POSTMAN,是可以正常的,服务器可以接收到正常的调用。

但是Mac中的PostMan却会出错:{

"code": 415,

"message": "HTTP 415 Unsupported Media Type"

}

java postman上传文件解析_java_02

搜:

postman file HTTP 415 Unsupported Media Type

参考:

加上:

Accept: application/json

结果问题依旧,还是415错误。

且有时候会返回html的错误内容:

java postman上传文件解析_http_03

觉得此处的:

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

java postman上传文件解析_上传文件_04

试试,服务器端就可以接收到此调用(至少代码进了对应的断点了)

然后接着调试,确保文件的确可以正常上传。

好像最后还是需要加上boundary,才能正常传输文件的。

又配合后台继续调试:

对于加上boundary:

Content-Type: multipart/form-data;boundary=q273568sagdhg21358738

结果说是400 bad request:

java postman上传文件解析_java postman上传文件解析_05

不加上boundary的话:

Content-Type: multipart/form-data

也是400:

java postman上传文件解析_java_06

去掉Content-Type:

结果就可以正常上传文件了。

java postman上传文件解析_java postman上传文件解析_07

而对应的后台的java代码,说是就是用的普通的库和写法,不知道为何此处如果设置了

Content-Type: multipart/form-data

为何无效,而取消这个设置,就可以正常上传文件了:

原始图片:

java postman上传文件解析_java_08

缩略图:

java postman上传文件解析_http_09

【总结】

按照道理来说,如果是上传文件的话,此处的postman中的配置(加上对应的后台服务器代码的写法,好像是应该这么写)

POST xxx/xxx/upload

Headers:Authorization: Bearer 6c9f198878cb42e6aad83fecbb598d10_8a9bfdab5a21ca27015a21d72fb20000

Content-Type: multipart/form-data;boundary=any_random_value

Accept: application/json

java postman上传文件解析_java postman上传文件解析_10

Body:

form-data,类型为File,然后上传文件

java postman上传文件解析_postman_11

即可。

不过此处实际上是:

不要加上 Content-Type

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

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