【发布时间】:2013-01-12 18:20:19
【问题描述】:
叹息,我们又回到了这个话题。我可以在任何足够体面的浏览器上轻松使用 CORS 直接将文件上传到我的 AWS S3 存储桶。但是(它来了),有了 IE,我不得不退回到 iframe。很简单,设置一个隐藏的 iframe,创建一个表单,将其目标设置为 iframe 名称/id,提交表单。如果上传成功,Iframe 将被重定向到我指定的 url,我可以访问我需要的任何内容。但如果发生错误,由于 iframe 现在位于 AWS 域中,我将无法访问错误的 XML 内容。事实上,我什至不知道发生了错误。
我在互联网上看到勇敢的人谈论托管一个 html 文件,在要上传文件的同一个存储桶上,然后使用 postMessages 来路由 iframe 内容,或类似的东西。
有人可以向我解释如何实现这个神话般的解决方案吗? Blueimp 的 jQuery 文件上传器似乎解决了这个问题,但上帝的代码是如此 jQueryified,以至于我无法理解它的要点。
为清晰而编辑
- IE
- 因为 1,我不能使用 XDomainRequest 向 S3 发送文件
- 所以使用 Iframe 并将其与完整的表单一起发布到 S3
- 如果成功,AWS 会重定向到服务器上的一个页面,该页面会读取标头并
然后返回一个 JSONP 样式的响应,客户端上的脚本可以读取该响应(重定向页面可以
由我指定)。 - 如果出错,我现在能做的就是等待超时到期,然后控制台日志
一个 IFRAME ID,并弹出一个警报,以便用户可以按 ID 查询 iframe,
阅读 DAMN XML 内容,找出 AWS 指定的错误,然后重试(我在讽刺......)
【问题讨论】:
-
为什么 CORS 不适用于 IE?我有一个使用 jquery fileupload 插件,但我没有在 IE 上测试过。这个帖子blog.appharbor.com/2013/01/10/…似乎表明它可以在IE上运行
-
@d33pika - 它使用神奇的 jQuery 文件上传插件。我在问题中提到,从插件中提取这么多逻辑的任务非常非常非常困难
-
@d33pika 还有IE中NO CORS的问题
-
@JibiAbraham:嗯,IE 从第 8 版开始就有 CORS,但按照传统,它显然决定走自己的路。 XDomainRequest - Restrictions, Limitations and Workarounds
-
基本插件并不复杂:github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin。看看吧。
标签: javascript iframe upload amazon-s3