0

有谁知道如何通过http实现从客户端到客户端的文件发送。这是类似的例子,但找不到如何实现它:http: //jetbytes.com/有 什么想法吗?

4

2 回答 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 端。
  • 发件人定期(这里是每秒)询问服务器到目前为止获得了多少数据;服务器回答它收到了多少以及直到最后它期望多少。
  • 发件人更新其进度条。
  • ...
  • 发件人询问服务器到目前为止获得了多少数据;服务器回答完成。
  • 关闭例程就三个部分的交流。

当然必须有改进的空间:

对于实现,大部分工作将在客户端进行,这里描述的所有内容都可以使用 jQuery 实现。在服务器上,两个目标是传输数据和回复发送者。您必须为自己定义一个轻量级协议,以表示“我 [尚未] 准备好”、“到目前为止我有 N 个字节”、“我完成了”。

于 2012-07-14T13:56:21.540 回答