博文

目前显示的是标签为“Url-Shorten-Worker”的博文

白嫖worker 自建短链服务 Url-Shorten-Worker 变身文件保管站 File Storage 保存到 R2对象存储

图片
前言 之前 我们实现了 Url-Shorten-Worker 变身图床 Image Hosting 把图片转为Base64保存到KV 其实不只保存图片, 也是可以保存各种文件的. pdf啊, zip啊, 等等 都可以的. 那么就会遇到KV保存容量限制的问题. 思路 如果我们把文件保存到 R2 对象存储呢? 面向GPT开发 Hermes 对接 mimo-v2.5-pro Hermes 对接 claude-opus-4.8 把 https://github.com/crazypeace/Url-Shorten-Worker 项目 clone 到本地, 把整个项目学习分析一遍 我要做这样一个新开发, 你与我讨论方案, 不要实施. 开发一个新的系统模式 保存到R2对象存储的文件保管站 file-r2 把图片保存在R2数据库, 把 R2数据库 的链接作为 value, 保存在 KV 用户操作的前端页面保持与 imghost 项目一样 很多细节上的设计, 打磨, 测试, 反复 略. Github https://github.com/crazypeace/Url-Shorten-Worker 简要使用说明 如果你已经参考 以前的教程 搭建了以前的项目. 那么你需要: 更新 worker.js 注意设置  theme: "theme/file-r2-lite", system_type: "file-r2", 再设置5个变量 R2_ACCOUNT_ID        - R2 账户 ID  R2_ACCESS_KEY_ID     - S3 API Access Key ID  R2_SECRET_ACCESS_KEY - S3 API Secret Access Key  R2_BUCKET_NAME       - R2 存储桶名称  R2_PUBLIC_URL        - R2 公开访问 URL, 如 https://pub-xxxx.r2.dev  其实这5个变量, 我比较推荐你与一个有识图功能的AI互动, 来指导你一步一步怎么操作, 如果你搞不懂要点...

KV-woker 纯练手项目 保护 _ 开头的 Key VS code 重构 JS 代码 提取代码为函数

图片
KV-woker 项目准备实现的功能列表见此: https://zelikk.blogspot.com/2024/12/kv-woker-1.html 今天实现: 保护 _ 开头的 KV对. 因为我们的目标是把配置项都放到 KV 中保存. 按目前的设计, 需要把理更多的配置项的 KV 放到 protect_keylist 中. 如果未来系统有配置项的扩充, 那么就要记得在 protect_keylist 中添加, 这是不优雅的.  我们可以约定, 配置项在 KV 中都以 _ 开头保存. 这一点和自动生成短链的方法也不冲突, 自动生成短链的字符中不含有 _ 符号. 本项目目前保护两个KV, _admin_pwd_ 和 _user_pwd_ , 不允许用户 修改, 删除, 查询. 目前的实现, 是设置了一个数组 protect_keylist 在业务逻辑中, 使用判断数组中是否有元素的方式 List.includes(key) , 来判断是否是属于需要保护的key. if (protect_keylist.includes(req_key)) 这一功能的效果就是: https://newkvdb.crazypeace.workers.dev/_user_pwd_ 显示404 https://newkvdb.crazypeace.workers.dev/_admin_pwd_  显示404 而且在  https://newkvdb.crazypeace.workers.dev/kvdbkvdb LoadKV, 是查询不到 _admin_pwd_ 和 _user_pwd_ 的 value 的 第 1 步 先将 if (protect_keylist.includes(req_key)) 这个判断重构为一个函数 鼠标拖选 "protect_keylist.includes(req_key)" , 右键, "Refactor...", "Extract to function in global scope",  输入新函数的名字, "checkProtectKey" 回车Enter确认 你会发现, 之前选中的文字被替换为了一个函数调用 而文件的末尾, 新增了一个函数, 函数内容就是你之前选中的语句...

KV-woker 纯练手项目 把worker.js 里的配置项改为在 KV 中保存

图片
KV-woker 项目准备实现的功能列表见此: https://zelikk.blogspot.com/2024/12/kv-woker-1.html 今天实现: 把worker.js 里的配置项改为在 KV 中保存 第 1 步 在 KV 中把配置都添加进去, 前后都加上 _ 第 2 步 把 worker.js 里面的值当作默认值, 当KV中没有设置时, 维持程序运转.  从 KV 中读取配置值, 我们观察分为两类, 布尔值  Boolen 和 字符串 String. 所以做两个函数分别用于读取 布尔值  Boolen 和 字符串 String, 方便重复使用. 然后我们把这个构造配置值的函数, 放到访问worker时的调用函数的一开头. 测试发现有问题, 显示的不是 pastebin 页面. 检视代码, 发现 index_html, result_html, response_header, 这3个变量, 是和配置项有关系的. 所以把这3个也放到一个函数中, 同样的, 在访问worker时的调用函数的一开头就调用一下. 测试  https://newkvdb.crazypeace.workers.dev/kvdbadmin 功能正常, 而且可以通过页面直接改写配置项的值, 并生效. 比如, 控制 能否 读取全部KV *** 提交修改记录  https://github.com/crazypeace/KV-woker/commit/26752fc

KV-woker 纯练手项目 2个密码 对应不同的权限

图片
KV-woker 项目准备实现的功能列表见此: https://zelikk.blogspot.com/2024/12/kv-woker-1.html 今天实现: 2个权限和对应的密码. 管理员权限 和 用户权限 第 1 步 用 _admin_pwd_ 和 _user_pwd_ 实现原来 password 的控制访问的功能 在 KV 中, 添加记录 Key: _user_pwd_   Value:  (我随便定的示例) kvdbkvdb Key: _admin_pwd_ Value:  (我随便定的示例) kvdbadmin 原项目 Url-Shorten-Worker 中, 是在 KV 库中保存 password 来 控制访问权限的. 代码中, 在这里从KV库中获取  password 对应的 value, 作为校验密码. 后续的逻辑, 都是使用这个变量 password_value 与JSON中的password字段比较, 或者是与浏览器访问的path比较. 我们这么修改,  代码的最开头, 增加一个数组 const user_key_list = [   " _admin_pwd_ ",   " _user_pwd_ " ] 在代码原来从 KV库 查询 password 的地方, 改为 将每个 user_key_list 的成员, 从KV库查询, 并将结果保存到 user_password_value_list const user_password_value_list = await Promise.all(   user_key_list.map(async key => await KVDB.get(key) || null) ); * JS的语法是比较奇怪, 我们拿人类语言去问 GPT 就好了. 在校验权限的地方, 原来是判断 password_value 是否等于 XXXX.  改为 判断 user_password_value_list 是否包含 XXXX 测试 https://newkvdb.crazypeace.workers.dev/ kvdbkvdb https://newkvdb.crazypeace.w...

KV-woker 纯练手项目

图片
书接上文 当初我在 KV 中设置一个 password 的思路是, 我希望把 KV 看作是一个存储库, 那么使用权限密码也是保存的数据之一. 我知道目前有很多worker的项目, 是直接在 Variables and Secrets 变量和机密 中直接设置使用密码, 来控制不公开使用.  但我的思路不一样. 打个比方, 为了修改VPS的root密码,  一个是, 必须登录VPS厂商的后台管理面板中修改;  一个是, root登录成功后, 在命令行就可以修改.  我的思路是后者. 我准备在原短链项目上做一些增强开发. 进一步把当初的设想做完整. 也算是一个练习. 我能预期到, 这样的实现可能不实用. 因为每次访问worker, 都要从KV中读取一下password. 简单地说, 本来每天能转换100次短链, 这一下子只能转换50个了. (当然了, 本身KV的读取操作是每天10万次, 个人使用打个半折也足够用, 哈哈) ======== 我准备实现的功能包括: 2个权限和对应的密码. 管理员权限 和 用户权限 把worker.js 里的配置项都在 KV 中保存 为了不和原项目冲突, 以免直接使用原项目的一些用户被影响, 新开一个项目, 名称也更通用.  KV-woker 因为项目本身的定位更通用, 所以: 绑定 Bindings 用 KVDB 指向 KV 库 KV 库中设2个密码 _admin_pwd_ _user_pwd_ _user_pwd_ 用于控制能否访问管理页面, 增删改 KV 对. 相当于是普通用户. _admin_pwd_ 除了 _user_pwd_ 的权限以外, 还能增删改 _ 开头的 KV 对. 相当于是管理员. ======== 今天实现: 新建 github 项目 绑定 Bindings -  KVDB 用原来的 Url-Shorten-Worker 项目代码, 新建一个 Github 项目 KV-woker 在项目里搜索 Url-Shorten-Worker, 替换为 KV-woker * 如果你想跟随本教程实践, 记得搜索 crazypeace 替换为你自己的 Github 用户名. 搭一个 pastebin 系统. 测试 https:/...

白嫖worker 自建短链服务 Url-Shorten-Worker worker.js配置项增加 password

图片
配置项增加 password 不需要在KV中添加password条目 const config = {   password: " testpwd ", // 管理面板使用密码 // if password != null, then use this config; otherwise, read password from KV.   result_page: false, // 是否用特定的result页面来显示value // After get the value from KV, if use a page to show the result.   theme: "", // 管理面板的主题 // Homepage theme, use the empty value for default theme. To use urlcool theme, please fill with "theme/urlcool" .   cors: true, // 是否允许CORS使用API // Allow Cross-origin resource sharing for API requests.   unique_link: false, // 一个长链是否只有唯一的短链(会增加写入的使用量) // If it is true, the same long url will be shorten into the same short url   custom_link: true, // 允许自定义短链 // Allow users to customize the short url.   overwrite_kv: false, // 允许覆盖已存在的key // Allow user to overwrite an existed key.   snapchat_mode: false, // 短链只能访问一次(访问后就删除了) // The link will be distroyed after access.   visit_count: false, // 使用记数(会大大增加写入的使用量, 多人共用不推荐打开) // Count visit times....

Linux 命令行 curl 用POST方法 调用图床系统 API 添加二进制文件

图片
之前, 我们利用pastebin系统实现了用API添加文本文件 . 如果我们想保存二进制文件, 要怎么办呢? 这里, 我们利用图床系统imghost.

白嫖worker 自建短链服务 Url-Shorten-Worker 显示短链的二维码QRcode

图片
参考233boy的二维码工具. https://233boy.github.io/tools/qr.html 其中用到的二维码JS是 https://cdn.jsdelivr.net/gh/lrsjng/jquery-qrcode@0.18.0/dist/jquery-qrcode.min.js 并依赖 jQuery https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js 修改index.html. 在现有的短链文本框后再增加一个生成QRcode的按钮. 然后在现有的短链这一行与长链这一行之间, 添加一个div作为二维码的占位. 按下按钮的时候, 就生成二维码, 填充到那个占位的div里面.

白嫖worker 自建短链服务 Url-Shorten-Worker 支持中文 支持emoji

图片
需求 有朋友反馈, 如果短链自定义为中文, 就不行. 测试一下. 在管理页面中添加 "中文短链" 查询 KV 库, 添加正确. 在浏览器中测试, 报错不存在.

白嫖worker 自建短链服务 Url-Shorten-Worker 变身日记本 NetJournal 显示结果页面支持 Markdown

图片
需求 之前已经实现了 自建短链服务Url-Shorten-Worker变身日记本NetJournal 但是, 直接访问短链显示的是Markdown源码, 没有显示图文效果.

将图片以Blob的形式返回给浏览器 FireFox 乱码 其它浏览器正常

图片
还是之前的短链项目. 今天拿 FireFox 来调试, 发现图床的显示效果有问题. Edge 和 Chrome 显示正常.

Linux 命令行 curl 用POST方法 调用pastebin系统 API 添加文本文件

图片
我们已经有了 利用免费worker搭建的短链系统 , 通过 配置参数设置为网络记事本 Pastebin , 用于保存自己的翻墙节点订阅信息, 或者是clash的配置文件. 在某些场景下, 你在Linux环境下已经有了订阅信息的文件(或者clash的配置文件), 不想搞什么复制粘贴, 鼠标点点点, 就想命令行直接一键上传到短链系统(网络记事本 Pastebin)中. 那么, 可以使用 curl 命令, 用POST方法 调用短链系统的 API

白嫖worker 自建短链服务 Url-Shorten-Worker 变身日记本 NetJournal 支持Markdown

图片
上一篇我们解决了网络日记本 NetJournal 从无到有的核心后台逻辑 . 现在要来解决使用效果了. 谁也不想日记本里面只能用文字+emoji+ascii艺术吧.  那想一想, 最好的解决方案就是 Markdown 了. 启发 找 GPT 一问, 给了一个很好的例子. https://devv.ai/zh/search?threadId=dbr3kt6te3uo 核心代码就是这一小段 document.getElementById('markdown-content').addEventListener('input', function () {   const markdownContent = document.getElementById('markdown-content').value;   const htmlPreview = document.getElementById('html-preview');   htmlPreview.innerHTML = marked.parse(markdownContent); }); 实践 把这一段抄到我们的index.html里面去, 添加一个card, 里面显示我们当前输入的Markdown文本的效果. 还可以把这样的显示效果融合到显示列表中. function buildValueMarkdown(longUrl) {   let valueMarkdown = document.createElement('div')   valueMarkdown.classList.add("form-control")     valueMarkdown.innerHTML = marked.parse(longUrl)   return valueMarkdown } buildValueItemFunc = buildValueMarkdown 在调试过程中, 发现一个问题. 如果我把日记内容写得比较复杂, 里面就会带上一些 [] ! () # 这类符号, 并且还有换行. 当我在index.html调用API去查询单条记录的时候, 报错说json格式有什么问题. 但是我用 loadKV 去查询全部的时候,...

白嫖worker 自建短链服务 Url-Shorten-Worker 变身网络日记本 NetJournal

图片
前面我们已经实现了 网络记事本 PasteBin , 用于托管自己的一段文本. 演示站:  https://pastebin.icdyct.cloudns.asia/tieludasiliqiuweiyue 如果想作为自己的一份日记本的话, 用起来会有一点不顺手. 比如, 如果你把这个页面作为主要的操作页面, 而不是从别的地方写好了再复制粘贴过来, 那么这个页面并不能让你写一点了保存一下, 再写一点了再保存一下. 你点保存的时候会提示 key 存在冲突. 还有一点就是, 当你确定要修改某一篇日记时, 还要去显示列表中找到它, 有点不方便. 思路 一是实现一下, 在向数据库保存key-value时, 不要检测key是否已存在(在之前的短链系统中, 是检测了的) 二是增加读取指定key-value的小功能. 点击了 Load 按钮之后, 从数据库中把 value 读出来, 再把数据放到原本的操作界面上.  后续操作就可以按以前系统的操作方式使用就好了. 实践 worker.js 增加一个配置项 overwrite_kv 设置为 true 时, 添加key-value时就不检测key是否存在了. main.js 里面加一个读指定key-value的函数.  index.html 里面添加几个页面元素就不细讲了. ======= 完 Github:  https://github.com/crazypeace/url-Shorten-Worker/ 演示站:  https://journal.crazypeace.workers.dev/journaljournal

The Hot3 in Last 7 Days

酒馆SillyTavern 玩英文角色卡 也能以中文输出 设置世界书Lorebooks

白嫖worker 自建短链服务 Url-Shorten-Worker 显示短链的二维码QRcode