主题
储存管理
储存是兰空图床中重要的组成部分之一,目前支持 本地
、AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云 Kodo
、又拍云 USS
、Sftp
、Ftp
、Webdav
。
需要 Minio 或 Backblaze b2 支持?
任何使用标准的S3 API接口协议的储存,都可以使用 AWS S3
来实现上传,包括 Minio 和 Backblaze b2。
储存是如何运作的
系统中可以创建多个储存,每一个储存可以选择一个驱动,即本地、S3、阿里云 OSS 等,选择不同的驱动类型则需要填写不同的配置信息。
储存可以设置图片文件储存的具体位置,甚至可以设置为系统目录,例如 /root/photos
,但是需要注意,设置为系统目录可能存在权限相关问题。
正确的使用姿势应该是服务器挂载了一块大储存磁盘 /mnt/mydisk
,然后设置为 /mnt/mydisk/photos
。
创建或编辑储存时,程序会判断设置的路径是否存在,不存在则自动创建,并在 public
目录生成一个指向储存目录的符号链接,从而实现文件储存在服务器的任何位置还能保证公网可以访问到图片。
访问前缀是什么
为了实现文件储存在服务器任何位置还能保证公网可访问这个需求,我们就必须使用符号链接,您可以通俗的将符号链接理解为 Windows 系统中的快捷方式。
假设我们的访问域名是 http://localhost
,站点根目录为 /www/wwwroot/app.com/public
。
按照惯例,如果我们在站点根目录上传一张图片 test.png
,理论上我们的访问路径应该为 http://localhost/test.png
,而这种路径拼接的方式,文件被限制在了只能放在站点根目录,我们只能访问到站点根目录中的文件,即 /www/wwwroot/app.com/public/test.png
。
而如果我们在站点根目录创建了一个符号链接 uploads
,并且这个符号链接指向的实际储存位置为 /www/wwwroot/data
,现在我们通过访问 http://localhost/uploads/test.png
时,这时候的实际文件路径为 /www/wwwroot/data/test.png
。
访问前缀不仅起到了上述作用,程序还利用访问前缀来实现云处理功能(利用前缀获取指定的储存配置)。
所以,为了实现这个特性,程序中所有属于本地类型或开启了云处理的储存,都需要添加上这个访问前缀,导致 url 变的不好看。不过这是值得的。
处理器是什么
每个储存都可以分别设置一个图片安全驱动、图片处理驱动、云处理驱动。我们可以关联已创建的驱动,利用指定的驱动对储存的内容进行控制与处理。
- 关联指定的图片安全驱动,任何上传到该储存的图片,都将会按照已选择的图片安全驱动进行审核。
- 关联指定的图片处理驱动,任何上传到该储存的图片,都将会按照已选择的图片处理驱动进行处理(裁切、水印、滤镜等)。
- 关联指定的云处理驱动,我们就可以通过 url 参数对该图片进行动态处理。
支持的文件命名规则
名称 | 示例值 | 解释 |
---|---|---|
{Y} | 2024 | 当前年份 |
{y} | 24 | 当前年份简写 |
{m} | 01 | 当前月份 |
{d} | 04 | 当前 |
{Ymd} | 20240104 | 年月日 |
{filename} | 吴彦祖的自拍照 | 文件名称(不带拓展名) |
{ext} | png | 文件拓展名 |
{time} | 1718956160 | 时间戳 |
{uniqid} | 667530e55196f | 唯一ID |
{md5} | e10adc3949ba59abbe56e057f20f883e | 文件 md5 值 |
{sha1} | 7c4a8d09ca3762af61e59520943dc26494f8941b | 文件 sha1 值 |
{uuid} | ca083d36-1f0a-4d2a-83f7-f3e97f4f4bfa | UUID |
{uid} | 1 | 用户ID |