以前,我一直用坚果云给 Zotero 同步附件。配置一次,之后基本不用管,电脑之间切换也很顺手。直到免费账户的流量逐渐不够用了。按坚果云帮助中心的说明,免费账户每月可以上传 1 GB、下载 3 GB。平时零零散散加几篇论文还好,一旦攒了不少附件,或者要在另一台设备上重新下载,额度就容易吃紧。前段时间换了一台 MacBook Pro,在新电脑上同步附件时,很快就用完了当月的流量。等到下个月,第一天又把新额度耗光了,实在没办法继续这样用。于是又开始找替代方案。找来找去,总没有找到足够合适的,也实在不想为了同步论文,再多付一份钱。后来想到,我本来就有百度网盘会员,AList 也一直在用,能不能把这两样接起来,让 Zotero 继续通过 WebDAV 同步?更让我意外的是,我已经很久没有维护过 AList 里的百度网盘连接了。几个月、一年,甚至更久,具体已经记不清。重新打开,居然依旧能访问。既然现成的连接还在,就试试看。为什么没有选“插件加同步目录”Zotero 还有另一类常见方案:把附件移到一个固定目录,再用网盘客户端同步这个目录。以前的 ZotFile,以及现在的 ZotMoov,都能帮助管理这类附件。这里需要的是目录同步;单纯备份一份文件,并不会自动让另一台电脑上的文件保持一致。这类方案通常把附件变成“链接文件”:Zotero 记住文件的位置,文件本身交给其他软件管理。两台电脑都要配置目录同步,并让 Zotero 能找到各自的附件路径;如果两边都希望自动把新增附件移到外部目录,还得分别配置插件。只是读取已经链接好的文件,并不一定每台电脑都要安装同一个插件。它能解决问题,但对我来说,需要照顾的地方有点多。尤其是链接文件不受 Zotero 官方移动端支持,也不会通过 Zotero 自带的文件同步上传。把电脑上的目录安排好了,并不等于 iPad、手机里的官方 App 也能直接接着用。我更希望保留原来的使用习惯:附件照常导入 Zotero,打开另一台设备,等它同步下来就好。换掉附件存储,保留 Zotero 自带的同步先把“同步”拆开说清楚。Zotero 的数据同步和文件同步是两回事:同步内容这套方案中由谁负责文献条目、分类、标签、笔记等数据Zotero 官方服务器Zotero 内置阅读器产生的批注Zotero 官方的数据同步个人文献库中的 PDF 等已存储附件Zotero → AList WebDAV → 百度网盘所以,之前用坚果云时,也不是把整个 Zotero 文献库都交给了坚果云。文献数据仍然通过 Zotero 账号同步,坚果云主要负责附件。现在只是把这一部分换成了 AList 提供的 WebDAV。内置阅读器的批注保存在 Zotero 数据库中,日常高亮和记笔记不必每次重新传输整个 PDF。如果用外部阅读器直接改写了 PDF,变化才需要随附件文件同步。WebDAV 本来就是 Zotero 支持的文件同步方式,不需要另装附件同步插件;官方 iOS 和 Android 客户端也能使用 WebDAV。不过,它与 Zotero Storage 仍有区别:WebDAV 只负责个人文献库,群组附件仍需要 Zotero Storage;Zotero 网页文献库也不能直接读取这份 WebDAV 中的附件。我说“和官方同步差不多”,主要指个人文献库在客户端里的日常体验。最关键的选择:让 AList 服务器中转挂载成功,只说明 AList 能访问百度网盘,不代表 Zotero 下载所有附件都没有问题。AList 的百度网盘文档提醒:使用相关下载接口时,大约超过 20 MB 的文件需要携带 User-Agent: pan.baidu.com。这里说的是下载请求,不是“所有大文件上传都要修改 UA”;这个大小也应当理解为文档给出的经验界限,而不是永久不变的规则。如果 WebDAV 使用 302 重定向,AList 会把真实下载地址交给客户端,接下来由客户端直接向百度网盘下载文件。附件不经过 AList 服务器中转,省下了服务器带宽,但请求头也得由客户端满足。Zotero 的常规同步设置里没有填写 UA 的入口。为了同步附件,再借助 Surge 这类网络工具改写请求,还要照顾不同设备,想想就有点麻烦。所以我选择了 WebDAV 本机代理。这里的“本机”指运行 AList 的那台服务器。客户端只连接 AList,由 AList 向百度网盘请求文件,再把文件传给客户端。AList 的百度网盘驱动会给官方接口生成的下载链接附上所需 UA,代理请求使用这些信息,Zotero 就不必自己改请求头。两种路径放在一起看,会更直观:Whiteboard图:上两栏展示数据和附件的传输路径;302 一栏按操作顺序从左到右阅读。最后一步由百度网盘直接向 Zotero 传输附件,不经过 AList 中转,客户端需满足 UA 要求。302 对比仅针对下载,上传仍经过 AList。需要特别注意,AList 的 “Web 代理”和“WebDAV 策略”是两项独立设置。前者影响网页预览、下载等行为;Zotero 使用的是后者。只打开“Web 代理”,不能当作已经给 Zotero 配好了中转。对应设置见官方的 WebDAV 策略说明。具体怎样配置下面以已经部署好 AList 为前提,使用我的域名 pan.xxu.do 和挂载路径 /Baidu 说明。实际配置时换成自己的域名和挂载路径;不同版本的界面文字可能略有差异。挂载百度网盘。按 AList 的百度网盘文档完成授权,下载接口选择 Official。我在 AList 中使用的挂载路径是 /Baidu。先确认这个目录能正常列出文件,并能上传、下载文件,再继续配置 Zotero。将该存储的 WebDAV 策略设为“本机代理”。有些界面写作“本地代理”,含义都是由 AList 所在服务器中转。这里不选择 302,也不需要填写另外一台下载代理服务器。给 Zotero 准备一个 AList 专用账户。让它能够读取、创建和上传、更新及删除同步目录里的文件。AList 文档要求打开“Webdav 读取”“Webdav 管理”,并配置相应的基础文件操作权限;只读账户无法完成同步。新版 AList 应在角色作用域中限制可操作的目录,单改“基本路径”不能代替权限限制。具体名称见WebDAV 文档和用户权限说明。准备可用的 HTTPS 地址。我的 AList 地址是 https://pan.xxu.do,需要同步的设备都要能访问。官方移动端对明文 HTTP 有限制,直接使用有效证书的 HTTPS 更省事,原因见 Zotero 的说明。在 Zotero 中选择 WebDAV。先登录自己的 Zotero 账号,再进入“设置 → 同步”,将“我的文献库”的附件同步方式改成 WebDAV,填入 AList 的地址,以及刚才准备的 AList 用户名和密码。这里填的不是百度账号,也不是 Zotero 账号的密码。AList 的 WebDAV 入口是 /dav/。如果这个账户在 WebDAV 中看到的根目录对应 AList 的 /,使用我的域名和 /Baidu 挂载时,地址关系如下:位置示例准备填写的 WebDAV 父目录地址https://pan.xxu.do/dav/BaiduZotero 实际使用的同步目录https://pan.xxu.do/dav/Baidu/zotero/截图中,URL 输入框右侧已经固定显示 /zotero/,这是 Zotero 自动追加的。协议选择 https,地址栏只填 pan.xxu.do/dav/Baidu,不要再手动补一遍 zotero。Baidu 的大小写要与挂载路径一致。如果账户的 WebDAV 根目录已经映射到 /Baidu,地址栏则只填 pan.xxu.do/dav,不要重复添加挂载路径。Zotero 的文件同步设置。图中选择 WebDAV,并将附件下载方式设为“同步时下载”。填好后点击“验证服务器”。通过验证,再开始同步。地址追加规则和设置项可以对照 Zotero 同步设置文档。迁移旧附件时,多确认一步从坚果云迁过来时,不能以为改了 WebDAV 地址,旧服务里的附件就会自动搬到新服务。尤其是之前选了“按需下载”,本机可能只有条目,PDF 还留在旧服务上。比较稳妥的做法是,先在一台电脑上保留旧配置,将附件下载方式改为“同步时下载”,等下载完成,并检查旧附件能否打开。退出 Zotero 后,给数据目录做一份独立备份,再切换 WebDAV 地址,让这台电脑把本地附件同步到新位置。完成跨设备验证前,先保留旧服务中的文件。如果原来用的是链接附件,还需要通过“工具 → 管理附件”将它们转换成已存储附件,WebDAV 才会接管这些文件。不要把整个 Zotero 数据目录直接交给网盘客户端实时同步,正在使用的数据库文件不适合这样处理。“验证服务器成功”也不等于所有附件都测过了。我建议再做一次实际检查:从一台设备新增一个小 PDF 和一个明显大于 20 MB 的真实附件,完成上传后,在另一台尚未保存这些文件的设备上下载并打开。再用内置阅读器添加一条批注,确认另一端能收到。小文件正常、大附件失败时,优先检查 WebDAV 是否仍在走 302。如果条目到了、旧附件没到,先按 Zotero 的附件同步排查文档检查本地文件、上传结果和两端配置。不要把“替换在线文献库”当成迁移附件的步骤;那是另一类操作。方便的代价,是服务器要承担流量本机代理把客户端的麻烦集中到了服务器上,也让服务器成为了附件传输必经的一站。下载时,文件先从百度网盘到 AList 服务器,再从服务器到设备;上传则反过来。只要其中一段线路慢、丢包多或连接不稳定,整体体验就会受影响。有百度网盘会员,也不意味着这两段网络都能自动跑满速度。带宽数字可以粗略算一下:如果服务器向设备发送数据的带宽只有 10 Mbps,理论上限约为 1.25 MB/s,实际还要扣除协议开销。普通论文未必很在意,多设备同时同步或迁移整个文献库时,就会明显感觉到差别。另外,代理下载会让服务器接收并发送同一份附件,云服务器如何计算流量、是否只收出站费用,要看自己的套餐。首次迁移大量文件时,还可能遇到网盘接口限流、反向代理的上传大小限制或超时。遇到问题应先看报错对应哪一段,不必一上来就把并发调高。所以,这套组合比较适合已经有百度网盘会员,也有一台网络条件不错、可以持续运行 AList 的机器的人。如果为了这件事专门再买会员、租服务器,就需要重新算一遍成本。对我来说,吸引力恰好在于,这些东西原本就在用。目前用下来,感觉很好折腾完以后,日常使用反倒没什么特别的:照常收文献、打开 PDF、做批注,等 Zotero 自己同步。到目前为止,同步速度和之前用坚果云时没有什么本质区别,也没有为了换存储方式,再维护一套附件目录和同步插件。当然,这是我目前这套环境下的体验,不代表百度网盘的接口、授权和服务器线路会一直不变。同步也不能替代独立备份。但至少现在,不会再因为坚果云当月的免费流量耗尽,看到 Zotero 旁边那个提醒额度不够的红色感叹号了。把已经付过钱、已经在运行的东西用起来,就解决了一个一直惦记着的小问题,感觉还不错。
以前,我一直用坚果云给 Zotero 同步附件。配置一次,之后基本不用管,电脑之间切换也很顺手。直到免费账户的流量逐渐不够用了。
按坚果云帮助中心的说明,免费账户每月可以上传 1 GB、下载 3 GB。平时零零散散加几篇论文还好,一旦攒了不少附件,或者要在另一台设备上重新下载,额度就容易吃紧。
前段时间换了一台 MacBook Pro,在新电脑上同步附件时,很快就用完了当月的流量。等到下个月,第一天又把新额度耗光了,实在没办法继续这样用。
于是又开始找替代方案。找来找去,总没有找到足够合适的,也实在不想为了同步论文,再多付一份钱。
后来想到,我本来就有百度网盘会员,AList 也一直在用,能不能把这两样接起来,让 Zotero 继续通过 WebDAV 同步?
更让我意外的是,我已经很久没有维护过 AList 里的百度网盘连接了。几个月、一年,甚至更久,具体已经记不清。重新打开,居然依旧能访问。既然现成的连接还在,就试试看。
为什么没有选“插件加同步目录”
Zotero 还有另一类常见方案:把附件移到一个固定目录,再用网盘客户端同步这个目录。以前的 ZotFile,以及现在的 ZotMoov,都能帮助管理这类附件。这里需要的是目录同步;单纯备份一份文件,并不会自动让另一台电脑上的文件保持一致。
这类方案通常把附件变成“链接文件”:Zotero 记住文件的位置,文件本身交给其他软件管理。两台电脑都要配置目录同步,并让 Zotero 能找到各自的附件路径;如果两边都希望自动把新增附件移到外部目录,还得分别配置插件。只是读取已经链接好的文件,并不一定每台电脑都要安装同一个插件。
它能解决问题,但对我来说,需要照顾的地方有点多。尤其是链接文件不受 Zotero 官方移动端支持,也不会通过 Zotero 自带的文件同步上传。把电脑上的目录安排好了,并不等于 iPad、手机里的官方 App 也能直接接着用。
我更希望保留原来的使用习惯:附件照常导入 Zotero,打开另一台设备,等它同步下来就好。
换掉附件存储,保留 Zotero 自带的同步
先把“同步”拆开说清楚。Zotero 的数据同步和文件同步是两回事:
同步内容
这套方案中由谁负责
文献条目、分类、标签、笔记等数据
Zotero 官方服务器
Zotero 内置阅读器产生的批注
Zotero 官方的数据同步
个人文献库中的 PDF 等已存储附件
Zotero → AList WebDAV → 百度网盘
所以,之前用坚果云时,也不是把整个 Zotero 文献库都交给了坚果云。文献数据仍然通过 Zotero 账号同步,坚果云主要负责附件。现在只是把这一部分换成了 AList 提供的 WebDAV。
内置阅读器的批注保存在 Zotero 数据库中,日常高亮和记笔记不必每次重新传输整个 PDF。如果用外部阅读器直接改写了 PDF,变化才需要随附件文件同步。
WebDAV 本来就是 Zotero 支持的文件同步方式,不需要另装附件同步插件;官方 iOS 和 Android 客户端也能使用 WebDAV。不过,它与 Zotero Storage 仍有区别:WebDAV 只负责个人文献库,群组附件仍需要 Zotero Storage;Zotero 网页文献库也不能直接读取这份 WebDAV 中的附件。我说“和官方同步差不多”,主要指个人文献库在客户端里的日常体验。
最关键的选择:让 AList 服务器中转
挂载成功,只说明 AList 能访问百度网盘,不代表 Zotero 下载所有附件都没有问题。
AList 的百度网盘文档提醒:使用相关下载接口时,大约超过 20 MB 的文件需要携带 User-Agent: pan.baidu.com。这里说的是下载请求,不是“所有大文件上传都要修改 UA”;这个大小也应当理解为文档给出的经验界限,而不是永久不变的规则。
如果 WebDAV 使用 302 重定向,AList 会把真实下载地址交给客户端,接下来由客户端直接向百度网盘下载文件。附件不经过 AList 服务器中转,省下了服务器带宽,但请求头也得由客户端满足。
Zotero 的常规同步设置里没有填写 UA 的入口。为了同步附件,再借助 Surge 这类网络工具改写请求,还要照顾不同设备,想想就有点麻烦。
所以我选择了 WebDAV 本机代理。这里的“本机”指运行 AList 的那台服务器。客户端只连接 AList,由 AList 向百度网盘请求文件,再把文件传给客户端。AList 的百度网盘驱动会给官方接口生成的下载链接附上所需 UA,代理请求使用这些信息,Zotero 就不必自己改请求头。
两种路径放在一起看,会更直观:
图:上两栏展示数据和附件的传输路径;302 一栏按操作顺序从左到右阅读。最后一步由百度网盘直接向 Zotero 传输附件,不经过 AList 中转,客户端需满足 UA 要求。302 对比仅针对下载,上传仍经过 AList。
需要特别注意,AList 的 “Web 代理”和“WebDAV 策略”是两项独立设置。前者影响网页预览、下载等行为;Zotero 使用的是后者。只打开“Web 代理”,不能当作已经给 Zotero 配好了中转。对应设置见官方的 WebDAV 策略说明。
具体怎样配置
下面以已经部署好 AList 为前提,使用我的域名 pan.xxu.do 和挂载路径 /Baidu 说明。实际配置时换成自己的域名和挂载路径;不同版本的界面文字可能略有差异。
AList 的 WebDAV 入口是 /dav/。如果这个账户在 WebDAV 中看到的根目录对应 AList 的 /,使用我的域名和 /Baidu 挂载时,地址关系如下:
位置
示例
准备填写的 WebDAV 父目录地址
https://pan.xxu.do/dav/Baidu
Zotero 实际使用的同步目录
https://pan.xxu.do/dav/Baidu/zotero/
截图中,URL 输入框右侧已经固定显示 /zotero/,这是 Zotero 自动追加的。协议选择 https,地址栏只填 pan.xxu.do/dav/Baidu,不要再手动补一遍 zotero。Baidu 的大小写要与挂载路径一致。如果账户的 WebDAV 根目录已经映射到 /Baidu,地址栏则只填 pan.xxu.do/dav,不要重复添加挂载路径。
填好后点击“验证服务器”。通过验证,再开始同步。地址追加规则和设置项可以对照 Zotero 同步设置文档。
迁移旧附件时,多确认一步
从坚果云迁过来时,不能以为改了 WebDAV 地址,旧服务里的附件就会自动搬到新服务。尤其是之前选了“按需下载”,本机可能只有条目,PDF 还留在旧服务上。
比较稳妥的做法是,先在一台电脑上保留旧配置,将附件下载方式改为“同步时下载”,等下载完成,并检查旧附件能否打开。退出 Zotero 后,给数据目录做一份独立备份,再切换 WebDAV 地址,让这台电脑把本地附件同步到新位置。完成跨设备验证前,先保留旧服务中的文件。
如果原来用的是链接附件,还需要通过“工具 → 管理附件”将它们转换成已存储附件,WebDAV 才会接管这些文件。不要把整个 Zotero 数据目录直接交给网盘客户端实时同步,正在使用的数据库文件不适合这样处理。
“验证服务器成功”也不等于所有附件都测过了。我建议再做一次实际检查:从一台设备新增一个小 PDF 和一个明显大于 20 MB 的真实附件,完成上传后,在另一台尚未保存这些文件的设备上下载并打开。再用内置阅读器添加一条批注,确认另一端能收到。小文件正常、大附件失败时,优先检查 WebDAV 是否仍在走 302。
如果条目到了、旧附件没到,先按 Zotero 的附件同步排查文档检查本地文件、上传结果和两端配置。不要把“替换在线文献库”当成迁移附件的步骤;那是另一类操作。
方便的代价,是服务器要承担流量
本机代理把客户端的麻烦集中到了服务器上,也让服务器成为了附件传输必经的一站。
下载时,文件先从百度网盘到 AList 服务器,再从服务器到设备;上传则反过来。只要其中一段线路慢、丢包多或连接不稳定,整体体验就会受影响。有百度网盘会员,也不意味着这两段网络都能自动跑满速度。
带宽数字可以粗略算一下:如果服务器向设备发送数据的带宽只有 10 Mbps,理论上限约为 1.25 MB/s,实际还要扣除协议开销。普通论文未必很在意,多设备同时同步或迁移整个文献库时,就会明显感觉到差别。
另外,代理下载会让服务器接收并发送同一份附件,云服务器如何计算流量、是否只收出站费用,要看自己的套餐。首次迁移大量文件时,还可能遇到网盘接口限流、反向代理的上传大小限制或超时。遇到问题应先看报错对应哪一段,不必一上来就把并发调高。
所以,这套组合比较适合已经有百度网盘会员,也有一台网络条件不错、可以持续运行 AList 的机器的人。如果为了这件事专门再买会员、租服务器,就需要重新算一遍成本。对我来说,吸引力恰好在于,这些东西原本就在用。
目前用下来,感觉很好
折腾完以后,日常使用反倒没什么特别的:照常收文献、打开 PDF、做批注,等 Zotero 自己同步。到目前为止,同步速度和之前用坚果云时没有什么本质区别,也没有为了换存储方式,再维护一套附件目录和同步插件。
当然,这是我目前这套环境下的体验,不代表百度网盘的接口、授权和服务器线路会一直不变。同步也不能替代独立备份。
但至少现在,不会再因为坚果云当月的免费流量耗尽,看到 Zotero 旁边那个提醒额度不够的红色感叹号了。把已经付过钱、已经在运行的东西用起来,就解决了一个一直惦记着的小问题,感觉还不错。