最新消息:VPS服务器又从fzhost.net换回linode了,主题仍用朋友推荐的大前端D8

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

Mac crifan 163浏览 0评论

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

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

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

转载请注明:在路上 » 【已解决】Mac中Postman去POST实现文件上传时出错:HTTP 415 Unsupported Media Type

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
20 queries in 0.229 seconds, using 9.72MB memory