我需要从桌面应用程序上传到一个服务器上的可能很大的(如10到100的兆字节)文件.服务器代码用
PHP编写,桌面应用程序在C / MFC中.我希望能够在上传失败的时候恢复文件上传,因为这个软件将被用于不可靠的连接.我有什么选择?我发现了许多C上的HTTP上传组件,例如
http://www.chilkatsoft.com/refdoc/vcCkUploadRef.html,它看起来不错,但似乎并没有处理一半的上传的’resume'(我认为这是因为HTTP 1.1不支持).我也看过BITS服务,但上传它需要一个IIS服务器.到目前为止,我唯一的选择似乎是将我要上传的文件切成较小的部分(比如每个1兆像素),将它们全部上传到服务器,并用PHP重新组合,并运行校验和,看看是否一切正常.要恢复,我需要在上传开始时采取某种形式的“握手”,以确定服务器上已经有哪些部分.我必须手动编码,还是有人知道一个图书馆,为我做这一切,甚至是一个完全不同的解决方案?由于维护原因,我宁愿不要转换到支持简历的另一个协议(防火墙等的潜在问题)
我迟了八个月,但我只是偶然发现了这个问题,并且很惊讶,没有提到webDAV.您可以使用HTTP PUT方法上传,并包含一个Content-Range标头来处理恢复等. HEAD请求会告诉您文件是否已经存在,它是多大的.所以也许这样的事情:
1)HEAD远程文件
2)如果它存在,并且size ==本地大小,上传已经完成
3)如果尺寸<本地大小,添加一个Content-Range标头来请求并寻找到本地文件中的适当位置. 4)使PUT请求上传文件(或文件的一部分,如果恢复) 5)如果在PUT请求期间连接失败,请重新开始步骤1 您还可以列出(PROPFIND)和重命名(MOVE)文件,并用dav创建目录(MKCOL). 我相信Apache和Lighttpd都有dav扩展.