有谁知道如何通过http实现从客户端到客户端的文件发送。这是类似的例子,但找不到如何实现它:http: //jetbytes.com/有 什么想法吗?
问问题
368 次
2 回答
1
您提供的示例也适用于服务器。数据可能直接在接收方上流式传输,但仍然通过服务器。唯一的优点是他们不必在服务器上保留千兆字节的数据。
如果您对实现感到好奇,请启动 Firebug 并查看Network选项卡。
选择文件后,文件名将发送到服务器,并返回下载 URL:
files1 http://files1.jetbytes.com/42621cb32af927558
然后浏览器实际上每秒轮询服务器,询问是否有人请求下载。一旦响应从wait 0
变为wait 1
,浏览器中的 Javascript 就知道已请求下载,并 POST 带有文件的表单。
然后服务器端通过管道将 POST 数据直接发送到下载器。关于实现我们只能猜测,但 Node.js 可能是一个不错的选择。
于 2012-07-14T13:47:30.943 回答
1
猜猜你可以复制他们的行为,大致如下。
让我们命名交换的三个部分:发送者(在浏览器中)、服务器(嗯...服务器代码)、接收者(在浏览器中)。
- Sender UI:用户选择一个文件;
- 发件人:定期(这里是每秒),更新服务器说发件人已准备好发送文件。当服务器尚未准备好时,它只是向发件人回答“我还没有准备好”;
- Receiver 获取生成的 URL;
- 发件人(和以前一样)更新服务器说它已准备好发送文件。这次服务器回答“我准备好了”;
- 发件人只需 POST 文件(就像在最简单的 HTML 表单中所做的那样)。
- 服务器将 POST 数据中继到接收器(带有相关标头);
- 此操作需要时间,因此以下操作仅用于更新进度条 Sender 端。
- 发件人定期(这里是每秒)询问服务器到目前为止获得了多少数据;服务器回答它收到了多少以及直到最后它期望多少。
- 发件人更新其进度条。
- ...
- 发件人询问服务器到目前为止获得了多少数据;服务器回答完成。
- 关闭例程就三个部分的交流。
当然必须有改进的空间:
- 定期更新可以被另一种技术取代(参见http://en.wikipedia.org/wiki/Push_technology);
- 如果传输在完成之前被中断,则可以在传输中断的地方继续;
- ...许多其他方面
对于实现,大部分工作将在客户端进行,这里描述的所有内容都可以使用 jQuery 实现。在服务器上,两个目标是传输数据和回复发送者。您必须为自己定义一个轻量级协议,以表示“我 [尚未] 准备好”、“到目前为止我有 N 个字节”、“我完成了”。
于 2012-07-14T13:56:21.540 回答