Nicksxs's Blog

What hurts more, the pain of hard work or the pain of regret?

因为上次那个问题,所以打算把图库迁移到靠谱一些的cloudflare上,这里用到了rclone这个很强大的工具

在开始迁移前,先做一下准备

  1. 分别在腾讯云和 Cloudflare 平台申请 Access Key 和 Secret Key
  2. 安装 rclone 工具(可从 rclone 官网 下载)

配置远程存储

配置步骤

  1. 打开终端,输入 rclone config 开始远程存储配置
  2. n 创建新的远程存储

配置腾讯云 COS

  1. 输入远程存储名称,例如 cos
  2. 选择存储类型,选择 Amazon S3 兼容模式(选项编号可能因 rclone 版本而异)
  3. 选择服务提供商为腾讯云 COS
  4. 输入您的 access_key_idsecret_access_key(从腾讯云控制台获取)
  5. 选择相应的端点 API(根据您的存储桶所在地区选择北京或上海等)
  6. 配置访问权限:可以选择仅资源所有者拥有完全访问权限,或根据您的安全需求选择其他选项
  7. 选择存储类型(通常选择标准存储)
  8. 确认配置

配置 Cloudflare R2

  1. 再次输入 n 创建新的远程存储
  2. 输入远程存储名称,例如 r2
  3. 同样选择 Amazon S3 兼容模式
  4. 选择服务提供商为 Cloudflare R2
  5. 输入您的 access_key_idsecret_access_key(从 Cloudflare 控制台获取)
  6. 输入 R2 的端点 URL(通常格式为 https://<account_id>.r2.cloudflarestorage.com
  7. 配置访问权限
  8. 选择存储类型
  9. 确认配置

执行迁移操作

完成配置后,使用以下命令执行迁移:

1
rclone copy cos:mystore-xxxxxxx/img/ r2:img/ --progress

上述命令将把腾讯云 COS 中 mystore-xxxxxxx 存储桶下的 img 目录中的所有文件复制到 Cloudflare R2 的 img 存储桶中。添加的 --progress 参数可以显示迁移进度。

高级选项

为了获得更好的迁移体验,您可以考虑以下高级选项:

  • 使用 --transfers=N 参数设置并行传输数量,加快迁移速度
  • 使用 --checkers=N 参数设置并行检查数量
  • 使用 --dry-run 参数测试迁移过程而不实际复制文件
  • 使用 --log-file=FILE 参数将迁移日志保存到文件中

例如:

1
rclone copy cos:mystore-xxxxxxx/img/ r2:img/ --progress --transfers=4 --checkers=8 --stats=10s

验证迁移结果

迁移完成后,可以使用以下命令验证两边的文件是否一致:

1
rclone check cos:mystore-xxxxxxx/img/ r2:img/ --one-way

结语

通过 rclone 这一强大工具,可以轻松实现云存储服务之间的数据迁移。Cloudflare R2 提供了稳定可靠的对象存储服务,同时其无出站流量费用的特性也使其成为图库存储的理想选择。

上周四,突然接到腾讯云的电话,当然不是叫我去面试的,是说我账户欠费了,而且一下欠了二十多,因为这个账户我除了包年包月的我都会及时续费,剩下的就是一个放我博客图片的cos对象存储,本来可能一天就几分钱,一年充个十块钱都足够用了,突然一天就欠了二十多还是引起了我的警觉,去看了下说是什么外网下行流量费,我想着怎么又有这么个收费名目了,腾讯云给我的感觉就是一直巧立名目,或者增加收费项,后面也问了客服,说是我开的是公有读私有写,而且允许空refer访问(这个我记得是改过的,不知道为啥现在变成了空refer),也挺奇怪的,这种page托管的博客,不都是只能公有读么,私有读的话我还放啥图片,除非全都走服务端中转。
唯一一个优点是总算有个日志,结果看了下是江苏泰顺一哥们一直在换着ip刷,用的还是固定的okhttp客户端,这里想放个图,但是这个优点也被后面的缺点给淹没了,因为腾讯云不支持按访问客户端和ip段设置黑名单,简直离谱,都立了这个名目收费了,对应的功能还不行,都能怀疑是故意漏个口子让刷
可能暂时就不能放出来图片了,主要是也没精力搞什么服务端加密,打算迁到r2或者其他方式了,如果有大佬对这方面有经验又碰巧看到了这篇文章,希望能给下指导。
还有这位用了江苏泰顺ip(说不定是肉鸡)的哥们,是有啥想不开的呢

String.format是Java中String类非常常用的一个方法,可以帮我们将占位符替换成变量,比如%d可以作为整型的占位符,%s可以作为字符串的占位符,但是吧有的时候常用归常用,有的时候碰到问题了还是得学习记录下
比如我们要写一个字符串替换方法

1
2
3
4
5
public class Demo {
public static void main(String[] args) {
System.out.printf("成功是%d%的努力和%d%的天赋", 99, 1);
}
}

就是希望输出 “成功是99%的努力和1%的天赋” ,先不管这句话的正确性,看看能不能正常输出(肯定是不能)

1
2
3
4
5
6
7
Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '的'
at java.util.Formatter.checkText(Formatter.java:2579)
at java.util.Formatter.parse(Formatter.java:2555)
at java.util.Formatter.format(Formatter.java:2501)
at java.io.PrintStream.format(PrintStream.java:970)
at java.io.PrintStream.printf(PrintStream.java:871)
at demo.Demo.main(Demo.java:9)

会有这样的报错,虽然是个小问题我们还是来仔细研究下,
首先这边format函数会根据可能的占位符去提取并分割字符串

1
2
3
4
5
6
7
8
9
10
11
private static final String formatSpecifier
= "%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])";

private static Pattern fsPattern = Pattern.compile(formatSpecifier);

/**
* Finds format specifiers in the format string.
*/
private FormatString[] parse(String s) {
ArrayList<FormatString> al = new ArrayList<>();
Matcher m = fsPattern.matcher(s);

比如上面的字符串,可以提取到两个有效的 %d
然后对剩余的进行分割,分割后再遍历校验每一个字符
如果碰到单独的 % 就说明出现了错误的分隔符
会调用 checkText 来识别报错
而如果我们想要能够正常输出% 也非常简单,只需要使用两个百分号 %%
这里其实就是匹配到了上面 formatSpecifier 的最后面,
%后面可以匹配的可以使 a-zA-Z 以及 %
当是连续的两个 %% 时就会被识别成转义成实际的 %

1
2
3
public static void main(String[] args) {
System.out.printf("成功是%d%%的努力和%d%%的天赋", 99, 1);
}

换成这样就能正常输出了

chatbox 是个可以链接大模型api服务的客户端工具,之前我们说的都是使用自己部署的蒸馏模型,如果现在本地使用全尺寸大模型的话,就可以使用像 chatbox 这样的客户端工具
首先我们需要下载 chatbox 这个软件,注意到现在他们家的网站需要科学上网才能打开,所以需要处理下网络问题下载完成后我们需要去注册并开通大模型的api服务
目前有像火山引擎,硅基流动等等在提供支持deepseek-r1全尺寸模型的api服务,可以自由选择,这里以火山引擎为例
首先是注册火山引擎,地址是这 https://www.volcengine.com/experience/ark

然后不介意的话,可以填下我的邀请码,我们都可以获得比较可观数量的token额度,我的邀请码是 7R4RJOO8
接下去就是开通api服务,

这里就要使用我们自定义的模型提供上,这里的api域名是参考
的url进行配置,以及确定模型名是 deepseek-r1-250120

接下去我们就可以在chatbox中使用我们的deepseek-r1大模型了,
比如我让它生成一个网页版的贪吃蛇

还是能够很流畅的响应,毕竟火山背靠头条
这边也贴一下我的火山邀请码

另外还有硅基流动的邀请码 idw8RreO 同样我们都能获得一定数量的token

之前我们用LM Studio 本地部署了 deepseek的蒸馏大模型,虽然肯定无法跟满血版比,但是对于本地的一些小应用还是可以尝试的
这边我们就不自己实现了,借助于 Anything LLM来做个尝试
首先可以在 anythingllm 下载对应系统版本的 Anything,注意安装的时候它有两个阶段,会走两次进度条,第二次会慢一些。
安装好后,我们要选择它的大模型供应者

先要在LM Studio中开启http服务,
然后再在 AnythingLLM 中选好以 LM Studio 作为大模型提供商

之后在 Anything 窗口中可以新建一个工作区

新建完之后,我们为了实现rag功能,就用个简单的示例,比如以raid 作为话题,我找到某乎的一篇文章
点击左侧工作区旁边的上传

我们可以这里提交链接,由Anything LLM帮我们把网页保存下来然后embedding到向量数据库里,然后就可以在我们对话的时候根据这个文章来做增项

然后我们问个问题,就可以发现它已经借助于本地文档的信息来增强内容生成

这样就非常方便的实现了rag,还可以提交本地的笔记文稿等,现在这些应用也已经变得越来越成熟了。

0%