Tip
分享一个我在用的七牛云图床上传方案,通过Scriptable和快捷指令实现。
1 背景
写博客的时候经常需要上传图片获取链接,每次都要打开网页上传比较麻烦。所以写了这个脚本,配合快捷指令可以直接在手机上传图片到七牛云,自动复制链接到剪贴板。
主要用途:
- 博客写作时快速获取图片链接
- 在手机上编辑Markdown文档
- 分享图片时需要外链
2 准备工作
2.1 安装Scriptable
Scriptable是iOS上的JavaScript自动化工具,可以和快捷指令配合使用。在App Store搜索下载即可。
2.2 配置七牛云
七牛云的配置步骤:
-
注册账号:前往七牛云官网注册(需要实名认证)
-
创建存储空间:
- 登录控制台 → 对象存储 → 新建存储空间
- 选择公开空间(图床需要外链访问)
- 区域选择离你最近的(华东/华北/华南)
-
获取必要信息:
- AccessKey/SecretKey:个人中心 → 密钥管理
- 存储空间名称:你创建的Bucket名称
- 域名:存储空间 → 域名管理(可使用测试域名)
-
生成上传Token(重要):
# 可以使用在线工具生成:https://tool.lu/qiniu/# 或使用七牛云SDK生成(推荐)
Warning
Token有有效期限制,过期需要重新生成。建议使用服务端生成Token或定期更新。
3 脚本实现
下面是完整的Scriptable脚本,它实现了图片上传到七牛云的核心功能:
// 七牛云配置qiniu_api = "http://up-z2.qiniup.com"; // 华东区域上传地址cdn_url = ""; // 你的CDN域名,如 https://cdn.example.com/token = ""; // 七牛云上传凭证
// 获取图片let imgFile = "";if (args.images.length <= 0) { // 如果没有传入图片,从相册选择 imgFile = await Photos.fromLibrary();} else { // 使用传入的第一张图片 imgFile = args.images[0];}
// 生成唯一文件名let df = new DateFormatter();df.dateFormat = "yyyyMMddHHmmSSS";let dateString = df.string(new Date());console.log(dateString);
// 构建上传请求let req = new Request(qiniu_api);req.method = "POST";req.headers = { "content-type": "multipart/form-data" };req.addParameterToMultipart("key", "image/" + dateString + ".png"); // 文件在七牛云的路径req.addParameterToMultipart("token", token); // 上传凭证req.addParameterToMultipart("fileName", "reqFileName"); // 文件名参数req.addImageToMultipart(imgFile, "file", "FN"); // 添加图片文件
// 执行上传并处理结果let result = await req.loadJSON();let resultString = cdn_url + result["key"];let mdString = "![" + result["key"] + "](" + resultString + "-small.webp)"; // 生成Markdown格式console.log(mdString);Pasteboard.copyString(mdString); // 复制到剪贴板Script.complete(); // 结束脚本
代码说明
脚本的主要逻辑:
-
获取图片:如果快捷指令传入了图片就用传入的,否则从相册选择
-
生成文件名:用时间戳生成唯一文件名,避免冲突
-
上传到七牛云:构造multipart/form-data请求,包含key、token等参数
-
返回链接:拼接CDN域名和文件路径,生成Markdown格式链接并复制到剪贴板
4 一些补充
关于Token
七牛云的上传Token有时效限制,这个脚本里直接写死了Token,实际使用时需要注意更新。更好的方案是搭建一个服务端动态生成Token。
图片处理
七牛云支持在URL后面加参数来处理图片,比如:
- 转WebP格式:
?imageView2/format/webp
- 压缩质量:
?imageView2/quality/80
- 调整大小:
?imageView2/thumbnail/500x500
我在脚本里加了-small.webp
后缀,实际使用时可以根据需要调整。
其他说明
- 这个脚本只支持单张图片上传,如果需要批量上传需要改造
- 七牛云的免费额度每个账号不同,具体以官网为准
- 如果域名访问有问题,可能需要备案或使用其他CDN