电话咨询
微信咨询
199 6386 0417
扫码添加客服

文件本地编辑功能介绍

2022-06-09 16:11:00
高玉浩
原创
2421
摘要:悦库企业网盘文件本地编辑功能历史悠久,且广受用户欢迎,是网盘核心功能。
悦库企业网盘文件本地编辑功能历史悠久,且广受用户欢迎,是网盘核心功能。最近时有用户反馈悦库网盘在多人协作场景下的文件本地编辑不可靠,低几率发生文件冲突和内容不实时同步等问题。
本地编辑过程中的上传/下载是通过一种基于文件时间戳的对比机制触发,如果用户系统时间与服务器系统时间差异较大会造成不稳定因素,因此我们决定对其机制进行升级优化。本篇文章中我将悦库团队的最终讨论结果做为优化提案进行汇总,用于指导用户理解文件本地编辑的交互过程,也用于指导团队开发人员理解业务细节,保证本提案准确落地。

在本提案中我们将基于时间戳的文件对比机制,调整为基于文件版本和内容散列值的对比机制,将在2022年6月初于4.7.2版中发布。


什么是文件本地编辑

在网盘客户端中点击文件后会自动加锁并下载到缓存位置,再使用本地默认程序打开。

本地编辑完成后可自动上传到网盘中,然后自动解锁,在锁定过程中其他人不能编辑该文件。


什么是文件版本

文件版本是指在文件的编辑过程中,对每一次变更作为一个版本号进行记录,以便将来查阅特定历史版本的变更情况。
在多人编辑场景下,一个文件的版本生成过程如下:


悦库网盘的历史版本实例:
这是悦库持续集成系统使用yshell命令行工具自动上传文件产生的历史版本,可以看到每个历史版本中都有对应一个唯一版本号。
在文件的版本列表中可以追溯任意版本的数据,便于查看文件变更情况。


什么是文件内容散列值

通过将文件分块,对每个块进行散列计算,然后对所有块散列值再散列生成文件的内容散列值,以下图例是拥有4个块的文件内容散列值生成过程:


新的本地编辑功能实施

本地编辑功能包括本地打开、自动上传两部分。

本地打开

当用户在客户端中以本地编辑方式打开文件时,首先检查文件的编辑锁定状态,如果文件已被锁定且锁定者不是当前用户,则提示用户文件已被锁定,但可以以只读方式打开,下载打开后文件不能编辑和上传。如果文件没有锁定或锁定者是当前用户,则下载后以读写方式打开文件。
打开文件时,如果文件没有下载,则直接下载,并记录文件的版本号、ID、内容散列值、本地全路径、打开时间、状态等。
如果文件已下载,则检查远程版本号和本地版本号是否一致:
如果一致则不需要下载,直接打开本地文件。
如果远程版本号大于本地版本号,则先计算本地文件的内容散列值,然后与下载时记录的原始散列值进行对比:
  • 如果不一致说明用户在下载文件后做了修改,这时如果强制下载就会覆盖用户本地修改的内容,这就产生了下载冲突,需要提示用户将远程版本的内容和本地修改的内容合并。
  • 如果一致则直接下载并覆盖本地文件,更新本地记录文件的版本号、内容散列值,然后打开本地文件。

自动上传

文件以读写方式本地打开后,网盘会一直监控文件的修改时间,如果发生变更则自动上传。
上传时,如果本地版本号等于远程版本号则直接上传,上传完成后更新本地版本号和内容散列值。
如果本地版本号小于远程版本号,则说明远程文件已经被别人修改过,如果强制上传会覆盖别人的修改,这就产生了上传冲突,需要提示用户将远程版本的内容和本地修改的内容合并。
当用户编辑完成后,需要对文件执行自动解锁操作,由于文件可以进行独占和共享打开,没有通用的方法确认用户是否已经编辑完成,只能用两种模式识别文件编辑完成状态:
  1. 对于已知的独占打开的文件格式,如office文件,可以轮询确认文件是否已经解除占用,如果解除占用则解锁。
  2. 对于其他的文件格式,如文本文件,使用进程关联的方式,轮询打开文件的进程,如果进程退出则解锁。
如果编辑时退出客户端,就不能自动上传,下次启动客户端时,会检查编辑未上传文件,如果有则认为编辑已完成,尝试上传并自动解锁。
经验交流和获得帮助
如果您遇到问题可以联系我们,很高兴为您提供帮助~
QQ群450448657        微信 : 19963860417


发表评论
评论通过审核后显示。
联系我们
联系人: 高先生
电话: 19963860417
Email: service@ydisk.cn
QQ: 480247680
微信: 19963860417
地址: 青岛市黄岛区井冈山路157号中南金石国际广场A座3202室