http 状态码都是 200,业务状态码写在响应体里的 API 接口,返回文件如何处理?

108 天前
 afeiche

这边的 API 的 http code 都是 200 ,业务错误码都写在响应体里了,现在有个接口返回的是文件,就没办法判断错误码了,这也算这种模式的一个局限性了,只能考虑把文件 base64 放在响应体里吗?

1514 次点击
所在节点    程序员
12 条回复
RightHand
108 天前
又不是不能用
xiaoming1992
108 天前
有业务错误,就不响应文件(而是响应业务错误码),不就行了。
BeautifulSoap
108 天前
接口错误了还返回正常文件吗。。。。
vincentWdp
108 天前
判断 response header 里的 content-type 看是 json 还是其他
ffLoveJava
108 天前
借此请教个类似的疑问:springBoot +vue
普通的接口都同意返回一个结果对象封装了状态码、错误信息、返回数据。
但是返回文件流的接口,比如某些文件添加当前登录用户信息的水印后以流的形式返给前端,这种接口返回类型是 void ,字节流放在 HttpServletResponse 中 flush 返回。 那这种接口出现错误后,比如无权查看、文件被锁定无法查看 等等 怎么返回前端? 前端通过什么判断是一个正常的文件流还是一串错误信息
EthanZhuXE2V
108 天前
返回文件的 oss 地址?
chendy
108 天前
问题是接口为啥返回文件,直接给用户下载不行么…
yinmin
108 天前
#4 正解。判断 response header 的 content-type ,如果出错是 application/json ,response body 是包含错误信息的 json 数据;如果正常返回 application/octet-stream ,response body 是二进制文件
laimikan
108 天前
文件都返回了为啥还有失败?
xuanbg
108 天前
不返回文件的 url ?直接返回文件流?
afeiche
108 天前
@vincentWdp 也是一种思路,我试试
sthwrong
107 天前
@ffLoveJava 思路差不多的,能返回流了那么响应头肯定不一样了,这时候的异常和业务异常无关,业务异常你按常规的比如 json 响应头返回就行了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1112671

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX