为 Halo 2.0 提供 S3 协议的对象存储策略,支持阿里云、腾讯云、七牛云等兼容 S3 协议的对象存储服务商
一般与服务商控制台中的空间名称一致。
注意部分服务商 s3 空间名 ≠ 空间名称,若出现“Access Denied”报错可检查 Bucket 是否正确。
可通过 S3Browser 查看桶列表,七牛云也可在“开发者平台-对象存储-空间概览-s3域名”中查看 s3 空间名。
请根据下方表格中的兼容访问风格选择,若您的服务商不在表格中,请自行查看服务商的 s3 兼容性文档或自行尝试。
风格说明:
当Endpoint填写s3.example.com
时
Path Style:SDK将访问s3.example.com/<bucket-name>/<object-key>
Virtual Hosted Style:SDK将访问<bucket-name>.s3.example.com/<object-key>
此处统一填写不带 bucket-name 的 Endpoint,SDK 会自动处理访问风格。
想了解 s3 协议的 Endpoint 的配置可在服务商的文档中搜索 s3、Endpoint 或访问域名等关键词,一般与服务商自己的 Endpoint 相同。
例如百度云提供
s3.bj.bcebos.com
和<bucket-name>.s3.bj.bcebos.com
两种 Endpoint,请填写s3.bj.bcebos.com
。
与服务商自己 API 的 Access Key 和 Access Secret 相同,详情查看对应服务商的文档。
一般留空即可。
若确认过其他配置正确又不能访问,请在服务商的文档中查看并填写英文的 Region,例如
cn-east-1
。Cloudflare 需要填写均为小写字母的
auto
。
上传到对象存储的目录,前后/
可省略,例如/halo
和halo
是等价的。
支持的占位符有:
${uuid-with-dash}
:带有-
的 UUID${uuid-no-dash}
:不带-
的 UUID${timestamp-sec}
:秒时间戳(10位时间戳)${timestamp-ms}
:毫秒时间戳(13位时间戳)${year}
:年份${month}
:月份(两位数)${day}
:日期(两位数)${weekday}
:星期几,1-7${hour}
:小时(24小时制,两位数)${minute}
:分钟(两位数)${second}
:秒(两位数)${millisecond}
:毫秒(三位数)${random-alphabetic:X}
:随机的小写英文字母,长度为X
,例如${random-alphabetic:5}
会生成abcde
。${random-num:X}
:随机的数字,长度为X
,例如${random-num:5}
会生成12345
。${random-alphanumeric:X}
:随机的小写英文字母和数字,长度为X
,例如${random-alphanumeric:5}
会生成abc12
。示例:
${year}/${month}/${day}/${random-alphabetic:1}
会放在2023/12/01/a
。halo/${uuid-no-dash}
会放在halo/123E4567E89B12D3A456426614174000
。
自定义文件名模板
中填写的模板,上传时替换相应占位符作后作为文件名。随机字母长度
中设置。2023-12-01-abcdefgh.png
。2023-12-01T09:30:01-abcdef.png
。随机字母长度
中设置。仅当上传时重命名文件方式
为使用原文件名 + 随机字母
或使用日期 + 随机字母
或使用日期时间 + 随机字母
或使用随机字母
时出现,用于设置随机字母的长度。
仅当上传时重命名文件方式
为自定义
时出现,用于设置自定义文件名模板。
支持的占位符有:
${origin-filename}
:原文件名${uuid-with-dash}
:带有-
的 UUID${uuid-no-dash}
:不带-
的 UUID${timestamp-sec}
:秒时间戳(10位时间戳)${timestamp-ms}
:毫秒时间戳(13位时间戳)${year}
:年份${month}
:月份(两位数)${day}
:日期(两位数)${weekday}
:星期几,1-7${hour}
:小时(24小时制,两位数)${minute}
:分钟(两位数)${second}
:秒(两位数)${millisecond}
:毫秒(三位数)${random-alphabetic:X}
:随机的小写英文字母,长度为X
,例如${random-alphabetic:5}
会生成abcde
。${random-num:X}
:随机的数字,长度为X
,例如${random-num:5}
会生成12345
。${random-alphanumeric:X}
:随机的小写英文字母和数字,长度为X
,例如${random-alphanumeric:5}
会生成abc12
。示例:
当原始文件名为image.png
时
${origin-filename}-${uuid-with-dash}
会生成image-123E4567-E89B-12D3-A456-426614174000.png
。${year}-${month}-${day}T${hour}:${minute}:${second}-${random-alphanumeric:5}
会生成2023-12-01T09:30:01-abc12.png
。${uuid-no-dash}_file_${random-alphabetic:5}
会生成123E4567E89B12D3A456426614174000_file_abcde.png
。halo_${origin-filename}_${random-num:3}
会生成halo_image_123.png
。
image.png
会变成image_abc1.png
。image.png
会变成image_abcd.png
。./gradlew build
修改 Halo 的配置文件
plugin:
runtime-mode: development # development, deployment
classes-directories:
- "build/classes"
- "build/resources"
lib-directories:
- "libs"
fixedPluginPath:
- "path/to/plugin-s3"
启动 Halo 之后即可在后台插件管理看到此插件。
./gradlew build
构建完成之后,可以在 build/libs
目录得到插件的 JAR 包,在 Halo 后台的插件管理上传即可。