代码之家  ›  专栏  ›  技术社区  ›  Roel

通过HTTP上传大文件

  •  13
  • Roel  · 技术社区  · 17 年前

    我需要从桌面应用程序向服务器上传可能很大(比如10到100兆字节)的文件。服务器代码是用PHP编写的,PHP是用C++/MFC编写的桌面应用程序。我希望能够恢复文件上传时,上传失败的一半,因为这个软件将用于不可靠的连接。我有什么选择?我已经找到了一些C++的HTTP上传组件,比如 http://www.chilkatsoft.com/refdoc/vcCkUploadRef.html

    8 回复  |  直到 17 年前
        1
  •  21
  •   ryan    16 年前

    2) 如果它存在并且大小==本地大小,则已完成上载

    3) 如果尺寸<本地大小,添加要请求的内容范围标头,并查找到本地文件中的适当位置。

    4) 发出PUT请求以上载文件(或部分文件,如果继续)

    5) 如果在PUT请求期间连接失败,请重新开始步骤1

        2
  •  2
  •   Osama Al-Maadeed    17 年前

    你需要一个标准尺寸(比如256k)。如果用户x上传的文件“abc.txt”为78.3MB,则会有313个完整块和一个较小的块。

    1. 您发送一个上传请求,说明文件名、大小以及初始线程数。
    2. php代码将创建一个以IP地址和文件名命名的临时文件夹,
    3. 您的php代码将它们保存到不同的文件中,并在验证校验和后确认接收,给出要发送的新块的编号,或使用此线程停止。
    4. 在所有线程完成后,您将要求php加入所有文件,如果缺少某些内容,它将转到3

    您可以随意增加或减少线程数,因为应用程序正在控制发送。

        3
  •  2
  •   volatilevoid    16 年前

    libcurl(capi)可能是一个可行的选择

    -C/--继续在 以给定偏移量继续/恢复上一次文件传输。给定偏移量是将被跳过的确切字节数,从源文件的开头开始计算,然后再传输到目标文件。如果与上载一起使用,curl将不使用FTP服务器命令大小。 使用“-C-”告诉curl自动找出在哪里/如何恢复传输。然后它使用给定的输出/输入文件来解决这个问题。

        4
  •  2
  •   Cameron Martin    13 年前

    谷歌已经创建了一个可恢复的HTTP上传协议。看见 https://developers.google.com/gdata/docs/resumable_upload

        5
  •  1
  •   Anton Gogolev    17 年前

        6
  •  1
  •   jpalecek    17 年前

    http://yourpage/.../upload.php?file=myfile&from=123456 并在客户端处理简历(也许您可以添加一个函数来检查服务器接收到的范围)

        7
  •  1
  •   Gelmir    15 年前

    哈哈,我也在想同样的事情——把整个事情颠倒过来,把服务器变成客户机,把客户机变成服务器。Thx对罗尔来说,为什么它不起作用,我现在更清楚了。

    @罗尔 我建议实现Java uploader[JumpLoader很好,它有JScript接口,甚至还有PHP服务器端的示例代码]。Flash上传程序在biiigggg文件(即:)方面遭受了巨大的损失,其规模为千兆字节。

        8
  •  0
  •   Framstag    12 年前

    它不能完全满足您的需要,因为它是用Perl编写的,需要一个基于UNIX的服务器,但是客户端可以在任何操作系统上。尽管如此,这可能对您有所帮助: http://fex.rus.uni-stuttgart.de/

        9
  •  0
  •   Genarito    5 年前

    存在名为的协议 TUS 对于中的某些实现的可恢复上载 PHP C++

    推荐文章