在IE下向七牛上传的返回值JSON会导致IE弹出下载框,应该如何处理?

我正在实现一个页面用来从客户端上传图片到七牛服务器(在IE浏览器下只能用iframe上传),但在测试时发现如果用户使用的是IE7到IE10,则七牛服务器返回的json会让IE弹出下载对应json的下载框。

我查了各种资料得知问题在于IE不能识别“Content-Type: application/json”的返回,如果将这个Content-Type改成text/plain则可以解决弹出下载框的问题。在七牛的api里,这个Content-Type有没有可能是可选的? 请问大家这个IE的问题应该如何解决?

阅读 11.8k
4 个回答

因为是跨域的,用一般的方式做无刷新上传比较麻烦。
普通ajax无法跨域post。
用iframe来做要保证iframen和父页面在同一个域,可以通过七牛直传的上传后跳转(returnUrl)方式来实现。

一般web端推荐用swfupload或plupload这样的上传组件来实现,简单方便,省事。有时间的童鞋还可以写出各种花哨的前端交互。

七牛是提供上传的特性来解决这个问题的,只需设置 multipart 的一个 part 为:

"accept": "text/plain; charset=utf-8"

上传完毕后返回的 Content-Type 则为上面设置的 "text/plain; charset=utf-8"。

@shijynaruto 请问这个multipart应该怎么设置啊?是在前端js里设置还是后台的Policy里设置呢?

我们也遇到这个问题了,多处查询没有解决,最后想起七牛的上传策略的 returnUrl

嗯,returnUrl 可以妥妥的解决跨域以及Content-Type的自定义问题:

关于 returnUrl

Web 端文件上传成功后,浏览器执行 303 跳转的 URL。
通常用于表单上传。
文件上传成功后会跳转到 <returnUrl>?upload_ret=<queryString>,<queryString>包含 returnBody 内容。如不设置 returnUrl,则直接将 returnBody 的内容返回给客户端。

特留言以望能帮助其他人

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进