file-upload – 从浏览器上传文件到另一个域的最佳方法是什么?

我正在为一些社交网络创建一个预定帖子的网络服务.需要处理高流量下文件上传的帮助.

流程概述:

>用户将文件上传到SomeServer(不是我的).
> SomeServer然后使用JSON字符串进行响应.
>我的网络应用程序应存储该JSON响应.

选项1:保存,cURL POST,删除tmp
我使它成功的愚蠢方式:

>用户将文件上传到MyWebApp;
> MyWebApp cURL是SomeServer的文件,获得响应.

选项2:JS魔术
它可以是完美的聪明方式:

>用户从iFrame中直接将文件上传到SomeServer;
> MyWebApp通过JavaScript获取响应.

但由于“同源政策”,这是不可能的,不是吗?

选项3:nginx代理?
生产服务器的更好方法:

>用户将文件上传到MyWebApp;
> nginx拦截文件上传并将它们直接发送到SomeServer;
> JSON响应也被nginx拦截并由MyWebApp处理.

这有什么意义吗,nigx配置是什么,例如,/ fileupload将它代理到SomeServer?

最佳答案 我没有服务器可以代替SomeServer来测试我的建议,但无论如何我都会试一试.如果我错了,那么我想你只需要
use Flash (sample code from VK).

如何使用iFrame将文件上传到SomeServer,接收JSON响应,然后使用postMessage将iSrame中的JSON响应从您的站点传递到主窗口.据我了解,这几乎是创建postMessage的动机.

总的来说,我正在考虑like thisYUI’s io() module,但添加了postMessage来绕过相同的原始政策.

或者在VK的情况下,using their explicit iFrame support.在我看来,您可以向全局VK对象添加方法,然后使用VK.callMethod()从VK原始域调用该方法.您可以使用该变通方法创建一个可以从隐藏的iFrame读取响应的函数.

因此,您使用VK.api(‘photos.getUploadServer’,…)来获取POST URL.

然后使用JS将该URL作为用于上载文件的FORM的操作插入.按照io() docs中“在HTML表单中上传文件”下的示例,在完整功能中,使用postMessage将JSON发布回父窗口.请参阅example and docs here.(如果它不能与io()一起使用,如果我对VK.callMethod()的说法正确,你当然可以使用roll-your-own示例代码.)

然后,为了响应postMessage,您可以使用常规AJAX将JSON响应上传回您的服务器.

点赞