Dropbox同步机制

参考Dropbox 同步机制

 

 

 

1〉  运行安装程序,拷贝完系统文件到C:/Users/ThinkPad/AppData/Roaming/Dropbox目录下,要求输入网盘帐户及密码,并且马上登录帐户,获取了帐户信息,确保帐户有效性;选择本地网盘目录(默认:C:/Users/ThinkPad/Documents/My Dropbox),生成帐户文件host.db(文本文件)。

host.db的内容:

l         帐户信息:用户名、密码(进行了加密,加密方法不详)

l         C:/Users/ThinkPad/Documents/My Dropbox base64进行了加密)

 

2〉  host.db中取出用户名密码,进行第一次登录,登录成功,下载服务端网盘文件目录结构,并下载文件,并把用户名、密码,写入dropbox.db中的config表中,以加密的方式,用户名以base64加密,密码不确定,至此第一次登录结束。

3〉  第一次登录网盘,下载服务端网盘文件后的每一次启动,都经过系统初始化、connect网盘、获取网盘目录树(在内存里保存着网盘目录树的同步数据结构)。

4〉  比较本地目录与服务端网盘目录树,对于本地“有”而服务端没有的的文件,进行“上传文件”, 对于本地实体文件与hash块做运算,发现改动,也要上传。

5〉  对本地“没有”,而服务端有的文件,进行“删除文件”。

6〉  copy到本地网盘对应目录中的文件,都需要上传文件,参见“上传文件机制”

7〉  删除本地文件后,删除服务端文件,并更新数据库表相关字段,置空“active_blocklist”,

   active_mtime=-1active_size=-1on_disk=0

8〉  上传、下载文件

Dropbox中所有的同步数据是两张sqlite表格block_cachefile_jorunal,同步机制请参考如下数据库定义的字段,上传操作active_***”字段;下载操作“updated_***”字段,下载完成后,拷贝“updated_***”字段到“active_***”相关字段中

 

上传文件机制:(操作“active_字段”)

1.对拷贝到网盘的数据,需要做上传处理,在分割若干块,每块做hash和摘要处理记录在block_cache表中,同时,也记录文件的变更时间,变更尺寸,上传服务器路径。

2.对每个文件的上传操作登记在file_journal中,对一个大文件,分割后的块hash ID 记录在“hash”中,对多个块的,用分号分割。

3.下载成功后,“on_disk”置1

跟踪结果:a. 上传完成后才更新数据库。

          b.  数据库中未用到“updated_***”字段。

           

下载文件机制

1.本地未找到服务端返回的文件信息。需要下载同步。

2.对每个需要下载的文件的下载操作登记在file_journal中,对一个大文件,分割后的块hash ID 记录在“hash”中,对多个块的,用分号分割。

3.下载成功后,“on_disk”置1

block_cache说明:

编号

类型

长度

接口描述

id

INTEGER

    -

记录编号

hash

VARCHAR

43

block hash ID

sig

TEXT

 *

摘要信息(由末尾采用“=”、“==”估计,初步认为是采用base64编码)

size

INT

-

block size

delete_after

INT

-

之后从表中删除掉

needed_for

INT

 

 

 

例子:

file_journal说明:

编号

类型

长度

接口描述

id

INTEGER

    -

记录编号

server_path

TEXT

*

文件服务器路径

active_server_path

TEXT

*

上传同步服务器路径(一般,内容同server_path

active_blocklist

TEXT

*

上传同步block list hash ID,用分号分割

active_mtime

INT

-

上传同步文件更新时间

active_size

INT

-

上传同步文件更新尺寸

active_sjid

INT

-

上传同步ID

active_dir

INT

-

上传同步是否是目录文件

active_attrs

TEXT

*

上传同步文件属性(一般为空)

updated_server_path

TEXT

*

下载同步服务器路径(一般,内容同server_path

updated _blocklist

TEXT

*

下载同步block list hash ID,用分号分割

updated _mtime

INT

-

下载同步文件更新时间

updated _size

INT

-

下载同步文件更新尺寸

updated _sjid

INT

-

下载同步ID

updated _dir

INT

-

下载同步是否是目录文件

updated _attrs

TEXT

*

下载同步文件属性(一般为空)

 

 

 

 

注意:“active_***”字段用于上载用;“updated_*** 字段用于下载载用,下载主要应用于新登录到已有帐户,下载服务端网盘文件。

 

例子:

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要使用Python与Dropbox进行交互,您可以使用Dropbox的官方Python SDK - Dropbox API v2。这个SDK提供了一组Python函数和类,用于与Dropbox进行文件上传、下载、删除等操作。 您可以使用以下步骤来开始使用Dropbox Python SDK: 1. 首先,您需要安装Dropbox Python SDK。您可以使用pip命令来安装它: ``` pip install dropbox ``` 2. 接下来,您需要在Dropbox开发者门户(https://www.dropbox.com/developers/apps)上创建一个应用程序,以获取API密钥和密钥密钥。在创建应用程序时,选择"Scoped access"(有限访问)权限类型,并添加对应用程序文件的访问权限。 3. 在Python脚本中,导入`dropbox`模块并创建一个`Dropbox`对象: ```python import dropbox dbx = dropbox.Dropbox("<your_api_key>") ``` 4. 您现在可以使用`dbx`对象执行各种Dropbox操作。例如,要上传文件: ```python with open("local_file.txt", "rb") as f: dbx.files_upload(f.read(), "/remote_file.txt") ``` 要下载文件: ```python metadata, res = dbx.files_download("/remote_file.txt") with open("local_file.txt", "wb") as f: f.write(res.content) ``` 要列出特定文件夹中的文件: ```python result = dbx.files_list_folder("/folder_path") for entry in result.entries: print(entry.name) ``` 这只是Dropbox Python SDK的一小部分功能。您可以在Dropbox官方文档(https://dropbox-sdk-python.readthedocs.io/)中找到更多示例和详细信息。 希望这可以帮助到您!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值