Obsidian利用插件Remotely-save实现超低成本全平台云笔记

Obsidian作为一个笔记软件,是目前最满足我需求的了。本地存储文件+Markdown格式作为基础+双链支持,以及好用的搜索等功能,基本实现了我对一款文字笔记软件的要求。

但是Obsidian的收费价格确实不低,虽然软件本身的所有功能基本免费,但是同步和发布功能的价格还是比较高的,超出了我的预算。当然Obsidian本身是很良心的,不用官方的同步功能,你有非常多的方式去实现云笔记,例如把Vault库文件夹放在网盘中。

之前我一直就是把Obsidian放在坚果云中来实现云同步,但是这个方式有一些缺点:

  1. 坚果云限制文件更新的频率,导致有时文件保存时会弹出保存失败的提示。
  2. 在移动端无法直接访问笔记。尽管有一些利用第三方软件+Webdav接口同步的方式,但还是不够方便。

最近看到了一款插件,remotely-save/remotely-save (github.com) ,支持利用S3 or S3-compatible、 Dropbox、OneDrive for personal、Webdav进行云同步。我尝试后感觉非常方便,特别是在移动端(安卓、IOS)端也可以方便的进行同步。

我最早测试了OneDrive for personal的同步方式,这个方式操作非常简单,在插件中选择认证,在弹出的页面中同意权限后,会在你的Onedrive中的应用文件夹下新建一个remotely-save文件夹,在其中存储你的Vault库文件夹。这个方法的一点缺点在于Onedrive在国内的访问实在不快(这也是为什么我之前用坚果云而非Onedrive同步Obsidian的原因之一。)
然后我就尝试了S3-compatible的方法。在国内的各大云厂商提供的对象存储服务基本都是S3-compatible的,例如阿里云的OSS,腾讯云的COS、华为云OBS等等。这里我选择了阿里云的OSS,因为之前用阿里云比较多,而且比较价格之后感觉阿里云相对价格也不算高。

方法介绍

  1. 打开Obsidian的插件市场,搜索并安装remotely-save插件,然后启用并勾选同意。

  2. 打开阿里云(如果未注册请先注册)并登录,到达控制台页面,在左侧产品与服务中选择”对象存储OSS“,点进去后,找到创建bucket。随便起一个bucket名字,并选择靠近你的机房,选择标准存储。后边的选项默认就行,创建bucket。
    请添加图片描述

  3. 点进bucket的设置,选择权限管理-访问控制 RAM-前往控制台,在这里新建一个子用户,访问方式选择Open API 调用访问。选择新建用户后一定不要关闭页面,此时页面会显示新建的用户的AccessKey ID和AccessKey Secret,一定要把这两个先记录下来。

  4. 然后回到bucket的设置页面,选择权限管理-Bucket 授权策略-设置-新增授权,在弹出的面板中选择 ”整个 Bucket“,”子用户“,选择上你刚刚新建的子用户,授权操作选择”完全控制“。然后确定即可。

  5. (可选)设置CORS(跨域设置)。Obsidian的Remotely-save插件目前在安卓以外的平台不需要进行该项设置,但安卓平台目前必须进行此项设置。在OSS管理页面-权限管理-跨域设置中新建
    请添加图片描述

    规则即可。按照如图填写并保存就行。

  6. 设置remotely-save插件。服务地址填写你在bucket看到的endpoint即可,一般例如oss-cn-beijing.aliyuncs.com,然后区域就相应的填写oss-cn-beijing,以及之前记录的Access Key ID和Secret Access Key。再填写上存储桶的名字,就完成了。

  7. 现在你的Obsidian左侧栏应该会出现一个同步的图标,可以点击试试同步了。

额外操作:
8. 在OSS的管理控制台找到资源包管理-购买资源包。可以以9元每年的价格购买40G的资源包,最多买5年的。一般人的笔记肯定是不到这个体积的。

费用计算

  1. 如果选择了购买资源包,那么5年内就是每年9元的存储价格。
  2. 流量价格目前是0.5元/G,一般来说,除非特别多的图片以及附件,否则一个月一块钱的流量怎么也够了。
  3. 总的来说每月的成本不超过2元,远低于坚果云等存储。关键是同步速度非常快,超过Onedrive等免费的存储方式。
  • 13
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在C++中,vector是一个非常有用的容器,可以存放任意类型的动态数组,并且可以增加和压缩数据。使用vector的基本操作包括插入元素、删除元素、查找元素等。其中,查找元素可以使用find函数,例如find(a.begin(),a.end(),10)可以在vector a中查找元素10,并返回其在向量中的位置。 另外,输出vector的元素有三种方法。第一种方法是使用下标方式打印vector,可以使用for循环遍历vector并输出元素,例如: ``` for(int i=0;i<nSize;i++) { cout<<vecClass[i]<<" "; } cout<<endl; ``` 第二种方法也是使用下标方式打印vector,但是使用at函数代替下标操作,例如: ``` for(int i=0;i<nSize;i++) { cout<<vecClass.at(i)<<" "; } cout<<endl; ``` 第三种方法是使用迭代器方式打印vector,可以使用for循环和迭代器遍历vector并输出元素,例如: ``` for(vector<float>::iterator it = vecClass.begin();it!=vecClass.end();it++) { cout<<*it<<" "; } cout<<endl; ``` 需要注意的是,使用迭代器方式打印vector时,输出某一指定的数值可能不太方便。在C++中,还可以使用迭代器访问vector中的元素,可以使用for循环和迭代器遍历vector,并通过迭代器访问元素进行操作,例如: ``` vector<int>::iterator it; for(it=array.begin();it!=array.end();it++) { cout<<*it<<endl; } ``` 这样可以依次输出vector中的元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C++中vector使用方法](https://blog.csdn.net/weixin_44607113/article/details/123738389)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值