【问题标题】:Cordova on iOS shows broken imageiOS 上的 Cordova 显示损坏的图像
【发布时间】:2016-09-08 05:56:06
【问题描述】:

我有一个在后台使用 Angular 的 cordova 应用程序(cordova 5、ios 4)。 我需要显示我通过 https 从远程服务器下载的图像 (jpg)。 但是,图像始终显示为被 webview 破坏。 图片是这样包含的:

<img ng-src="{{picture}}">

我尝试了 2 个变体来包含图片:

  • 直接通过 https url 显示图像。我可以在桌面浏览器和 iPhone Safari 浏览器中打开 url,并且它们可以正确显示。在科尔多瓦,它显示为损坏
  • 通过文件传输下载图像,然后通过 file:// 链接包含本地图像。同样的问题。

我已验证的内容:

  • 图像本身是正确的,我可以在浏览器中显示它
  • 下载正常,文件传输正确
  • cordova 已设置为允许所有资源,因此这似乎不是白名单问题
  • angulars sanitizing 也已调整,因此 html 中的链接实际上是正确的,即未修改
  • 服务器正在发送我已通过 wget 验证的正确内容类型

我的想法已经用完了。

【问题讨论】:

  • 验证ng-src 中的文件名是否正确。区分大小写有时可能是 Cordova 中的一个问题。
  • 我直接从cordova获取文件名,所以这不是问题。在这两种情况下(文件名、https),Safari 网络检查器也告诉我加载图像时出现问题。遗憾的是没有更多信息。
  • 你能发布确切的错误信息吗?

标签: ios angularjs cordova


【解决方案1】:

iOS 上 Cordova 的浏览器视图(UIWebview)似乎比独立浏览器更严格。我尝试通过 wget 下载图像,然后查看内容。它没有显示任何 jpg 标题,但被 unix file 命令识别为文本。
http 标头也没有显示 Content-Length。

解决方案
服务器端逻辑(spring)返回一个 byte[] 但我没有对它进行任何转换。所以我通过 web 应用程序上的 rest 配置进行了更改,以包含一个 ByteArrayHttpMessageConverter:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">
        </bean>         
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">              
        </bean>
    </mvc:message-converters>    
</mvc:annotation-driven>

然后它起作用了。浏览器似乎修复了丢失的文件头和/或编码(不确定确切的错误是什么),而 UIWebview 没有这样做。

【讨论】:

    猜你喜欢
    • 2010-12-14
    • 2013-09-13
    • 1970-01-01
    • 2018-12-06
    • 2017-12-07
    • 1970-01-01
    • 2020-02-11
    • 2018-05-05
    • 1970-01-01
    相关资源
    最近更新 更多