XuShaohua / bcloud

百度网盘的linux桌面客户端

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

还不支持与服务器之间同步

LiuLang opened this issue · comments

百度网盘的同步算法并没有公开. 它的windows客户端的做法大致是这样的, 本地的根目录开始, 统计所有文件/目录信息, 并得到一个很长的字符串(文件哈希), 然后与远程服务器上的哈希值进行比对, 如果两个值相同, 说明本地与远程已经同步了.

但是, 这个算法并没有公开, 就很难在bcloud里面实现了. 另一种方法是逆向它的客户端, 但是这明显很不合适. 当然了, 目前bcloud里面用到的API都是基于百度网盘web版, 以及PCS已经公开的API.

但如果用MD5来单独校验每个文件的话, 也不行; 因为部分文件(尤其是多媒体文件)在百度网盘上的MD5与在本地的MD5不相匹配(我估计是大文件分片的问题), 但如果是很小的文件, 倒不存在MD5不匹配的问题. 如果不存在这样的问题, 我们可以直接计算本地所有文件的MD5与远程所有文件的MD5相比较, 如果不相同, 再比较时间戳就可以确定哪个文件更新, 这样就确定了要同步的内容.

当然, bcloud是支持直接下载/上传多个文件和目录的.

比对是根据md5, pcs api文档里也有的,可惜web版的没有,但是接口是存在的, 也不会不合适.

大文件md5不匹配这个问题, 是因为大文件分片之后 有部分片上传失败 或者不完全 造成残缺, 可以每上传一片之后 通过返回的md5 和本地的分片对比 来防止这个问题 =w=

如果确实用这种方法, 那第一次同步大文件时成本就很高了.
比方说, 一个大视频文件1.5G, 同时在本地和网盘里面存在, 是之前从网盘下载到本地的; 现在要进行第一次同步, 这时的MD5就会不匹配了. 而其实这个文件不需要重新下载的.

或许可以先对比文件的时间标记, 等有空了再试一下.

"不支持与服务器之间的同步"与"支持直接下载/上传"这句话该怎么理解 ??
1、我理解不错的话,你所讲得“同步”应该是说自动同步,即开启了bcloud之后,就会自动与远程盘子同步成一致,但目前因算法问题还不能实现。对否?
2、"上传/下载"是指在bcloud开启后,若从本地托文件至远程,或反之操作均可达到目的,并可实时在bcloud中看到目录及文件名的改变。对否?
3、若以上二点成立,则同步功能不必要开发,因为没有意义了。

On 07/16/2014 09:59 AM, linux0ne wrote:

"不支持与服务器之间的同步"与"支持直接下载/上传"这句话该怎么理解 ??
1、我理解不错的话,你所讲得“同步”应该是说自动同步,即开启了bcloud之后,就会自动与远程盘子同步成一致,但目前因算法问题还不能实现。对否?
2、"上传/下载"是指在bcloud开启后,若从本地托文件至远程,或反之操作均可达到目的,并可实时在bcloud中看到目录及文件名的改变。对否?
3、若以上二点成立,则同步功能不必要开发,因为没有意义了。


Reply to this email directly or view it on GitHub:
#11 (comment)

这里说的同步, 是指像Dropbox这样的同步操作.

百度的同步是这样做的:

会话1向百度服务器通信, 并向服务器上传一个文件, 这时, 百度服务器会返回一
组HASH, 用于标记最新的同步状态.

之后, 会话2 与 百度服务器通信, 它会向服务器提交本地的HASH, 服务器会判定
是否与服务器上的相同, 如果不同, 客户端就会进行指定的 上传/下载 操作.

因为可能一个网盘帐户会在不同的终端里运行, 比如笔记本, 手机, 平板里, 这
时, 如果要保证服务及各个终端之间的数据同步, 就需要明白网盘的同步算法.

百度有一个 "同步盘" 客户端, 你可以试试.

我理解不错的话  你讲得同步应该是不同终端之间数据的统一   而并不是说本地托动一个文件上传并显示成功后   结果到网页服务器上一看却没有上传成功   或者说并不是指本地目录与远程目录在上传操作执行后却看不到统一的效果   我这样理解对吧?  如果对   那么我的看法还是说同步没有意义  因为目前来讲  你的软件基本上都是在ubuntu上使用   并不会有别的终端了  就算是centos  其效果也是一样的    除非到了ubutu touch系统的时候可能这个同步才有意义   呵呵  一点拙见  望谅 发送自我的 BlackBerry 10 智能手机。 发件人: LiuLang已发送: 2014年7月16日星期三 下午8:54收件人: LiuLang/bcloud答复: LiuLang/bcloud抄送: linux0ne主题: Re: [bcloud] 还不支持与服务器之间同步 (#11)On 07/16/2014 09:59 AM, linux0ne wrote:

"不支持与服务器之间的同步"与"支持直接下载/上传"这句话该怎么理解 ??
1、我理解不错的话,你所讲得“同步”应该是说自动同步,即开启了bcloud之后,就会自动与远程盘子同步成一致,但目前因算法问题还不能实现。对否?
2、"上传/下载"是指在bcloud开启后,若从本地托文件至远程,或反之操作均可达到目的,并可实时在bcloud中看到目录及文件名的改变。对否?
3、若以上二点成立,则同步功能不必要开发,因为没有意义了。


Reply to this email directly or view it on GitHub:
#11 (comment)

这里说的同步, 是指像Dropbox这样的同步操作.
百度的同步是这样做的:
会话1向百度服务器通信, 并向服务器上传一个文件, 这时, 百度服务器会返回一
组HASH, 用于标记最新的同步状态.
之后, 会话2 与 百度服务器通信, 它会向服务器提交本地的HASH, 服务器会判定
是否与服务器上的相同, 如果不同, 客户端就会进行指定的 上传/下载 操作.
因为可能一个网盘帐户会在不同的终端里运行, 比如笔记本, 手机, 平板里, 这
时, 如果要保证服务及各个终端之间的数据同步, 就需要明白网盘的同步算法.
百度有一个 "同步盘" 客户端, 你可以试试.

—Reply to this email directly or view it on GitHub.

同步是很有用的, 如果能支持同步的话, 只需要在本地建立一个同步目录(比如ubuntu one就这样做), 然后把文件拖放到这个同步目录, 网盘客户端就会自动把本地新加入的文件同步到服务器.
同样的, 如果在另一个终端(比如手机客户端)里面上传了一些文件到网盘里, PC客户端也会自动把这些更新的文件下载到本地的.
上面的过程是无缝的, 用户体验会非常好.

当然, 如果只用bcloud来下载一些视频, 或者直接在里面播放电影, 而并不会向百度网盘里上传个人的私有数据(比如照片, 文档), 那现在的bcloud已经基本够用了.

因为现在网络类型的问题  我还没能成功体验到本软件的强大功能   不过从以往经验讲 下载功能是必须的   上传功能也需要   毕竟要存储一定的东西到服务器上   以便于实现软件的备份等目的  我理解不同设备之间自动同步的涵义及使用  我的apple设备就是这样的机制    现在关键是代理网络登陆失败的问题    可能是https的原因    如果把https改成http是不是不影响软件的正常功能运行 发送自我的 BlackBerry 10 智能手机。 发件人: LiuLang已发送: 2014年7月17日星期四 下午10:09收件人: LiuLang/bcloud答复: LiuLang/bcloud抄送: linux0ne主题: Re: [bcloud] 还不支持与服务器之间同步 (#11)当然, 如果只用bcloud来下载一些视频, 或者直接在里面播放电影, 而并不会向百度网盘里上传个人的私有数据(比如照片, 文档), 那现在的bcloud已经基本够用了.

—Reply to this email directly or view it on GitHub.

On 07/18/2014 06:32 AM, linux0ne wrote:

因为现在网络类型的问题 我还没能成功体验到本软件的强大功能 不过从以往经验讲 下载功能是必须的 上传功能也需要 毕竟要存储一定的东西到服务器上 以便于实现软件的备份等目的 我理解不同设备之间自动同步的涵义及使用 我的apple设备就是这样的机制 现在关键是代理网络登陆失败的问题 可能是https的原因 如果把https改成http是不是不影响软件的正常功能运行 发送自我的 BlackBerry 10 智能手机。
发件人: LiuLang已发送: 2014年7月17日星期四 下午10:09收件人: LiuLang/bcloud答复: LiuLang/bcloud抄送: linux0ne主题: Re: [bcloud] 还不支持与服务器之间同步 (#11)当然, 如果只用bcloud来下载一些视频, 或者直接在里面播放电影, 而并不会向百度网盘里上传个人的私有数据(比如照片, 文档), 那现在的bcloud已经基本够用了.

—Reply to this email directly or view it on GitHub.


Reply to this email directly or view it on GitHub:
#11 (comment)

使用代理的话, 你需要让代理服务器支持https, 即先在代理服务器上发布一个证
书, 再在本地安装这个证书, 这样就可以正常使用https了.

Hi,这个问题解决了没有?想把该客户端移植到openwrt来实现定时从服务器上同步数据下来(这个太管用了)。现在有什么新思路吗

@hduffddybz
没有, 最近一直没搞这个

有没有计划改用 Qt5 开发 GUI ?

On 03/09/2015 08:32 PM, microcai wrote:

有没有计划改用 Qt5 开发 GUI ?


Reply to this email directly or view it on GitHub:
#11 (comment)

在工作时有用到Qt. 但自己的项目就比较随意了.

还有, 我看你github的状态是"找工作", 最近离职了吗? 愿意的话, 可以考虑一下
到deepin Linux来工作, 联系我 gsushzhsosgsu@gmail.com.

commented

话说来深度,主要干什么呢?
没有工作的可不止一个哦

On 03/10/2015 12:06 PM, gshmu wrote:

话说来深度,主要干什么呢?
没有工作的可不止一个哦


Reply to this email directly or view it on GitHub:
#11 (comment)

分的有不同的小组, 比如网站组, 翻译组, 测试组, 系统组, 应用开发组, 打包,
运维, 设计, 宣传, 市场等等. 哦, 我在应用组, 这里主要开发一些桌面应用, 比
如深度截图, 翻译, 软件中心, 音乐/视频播放器...

commented

表示会python,Django Web比较好,然后就是会shell,有合适的么?

@mhohai
请把你们的简历发到我邮箱, 我会帮忙直接转给这边的负责人的.

@LiuLang 对武汉不了解。:D 怕人生地不熟的。啥时候有计划在杭州开个办公室?
另外, 我不会 shell , 只会 C++

重新上传可解决吗?

上传大文件后,Meta Information 窗口中显示的 md5 值,可能不匹配(这是百度网盘 API 本身的问题)。此时重新上传将可解决这个问题(重新上传将会触发妙传,速度会很快;主要耗时在计算文件 md5 值)。

摘自 GangZhuo/BaiduPCS_NET

commented

想移植到openwrt的同学,请看这里
https://github.com/wishinlife/SyncY

commented

我们可以重新描述这个问题,我认为同步只是一个文件的修改时间的问题.无关于文件大小,也无关于文件内容是否相同,因为就算一个文件超级大.编辑它的时候它的内容也发生了变化.不可能与服务器一致,所以问题只剩下了,如何确定同步目录的文件,与文件的修改时间.