【问题标题】:Weird characters in image response of POST requestPOST 请求的图像响应中的奇怪字符
【发布时间】:2019-05-20 07:27:09
【问题描述】:

我必须向 API 发出 POST 请求,这个 API 返回一个我想在画布或 img 元素上显示的图像。问题是奇怪的字符正在响应,但在网络选项卡中,图像显示正确(下面的屏幕截图)

我已经尝试了AJAX - Weird characters in img tag after request response 中提到的所有内容

我尝试转换为base64,使用new Image() 加载,尝试转换为blob,使用FileReader() 加载,但加载了空白图像。

如果我使用带有new Image()FileReader() 的静态图像URL 而不是POST 请求,它可以正常工作。如何渲染来自 POST 请求的响应的图像?任何帮助表示赞赏。

【问题讨论】:

  • 建议将图像保存在某处,然后像使用静态 url 一样在 http 响应中简单地发送指向该图像的链接。如果没有其他选项,请尝试对源图像进行 base64 编码并发送 base64 编码图像,您应该能够在客户端进行解码。
  • 您获取的响应类型是什么?我猜这可能是因为字符编码。
  • @Quinten,静态 url 不是一个选项,api 根据有效负载生成图像。如果 api 响应本身是 base64,它可以被渲染是你的建议吗? @Manjunath,响应是图像,Content-Type: image/jpeg 在响应标头中。知道这些奇怪的字符代表什么类型的格式吗?
  • 如果 api 响应是 base64 编码的,您可以对其进行解码、保存并执行任何您喜欢的操作,或者您可以将其直接放入 img 的 src 标签中,因为它会自动解码(如果这是您的目标)
  • 我遇到了同样的问题并在这里解决了:stackoverflow.com/questions/70534780/…

标签: jquery ajax image html5-canvas


【解决方案1】:

fotinakisHow to parse into base64 string the binary image from response? 中提供的答案奏效了。

在自己发出 POST 请求时,responseType 必须设置为 arraybuffer,稍后可以将其转换为 base64。从二进制文件中获取 base64 是问题所在。 ajax 的成功回调默认返回二进制,除非另有设置。

其他responseTypes 可以在https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType 中找到。

我还是不明白一件事。静态图像 URL(GET) 也返回二进制数据,这对 new Image() 没有任何问题,但如果我从 POST 请求成功回调传递相同的二进制数据,它就不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-17
    • 2017-09-04
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多