前言
做图床这玩意儿,存储和流量成本都不低。所以我就去寻找廉价存储去了。然后发现了buyvm,256G存储每月只要1.25刀,还支持支付宝,实在是香啊。但是掉盘的情况比比皆是,而我是很看中数据的可用性的,故就此排除buyvm。
我还知道另外一家廉价存储,Backblaze。与buyvm价格几乎一致,却能提供较为稳定的对象存储服务。我顺带看了一下网友们的评论,挺不错的。于是就想着为图床增加Backblaze的存储策略,以便后续添加、修改。
参考
Lsky Pro 官方文档 - 如何自定义一个储存
如何使用 AWS s3 协议连接 backblaze b2
动手
- 增加一个枚举类
在 app/Enums/Strategy
文件夹中新增一个文件 BackblazeOption.php
,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| <?php
namespace App\Enums\Strategy;
final class BackblazeOption
{
/** @var string 访问url */
const Url = 'url';
/** @var string KeyId */
const KeyId = 'key_id';
/** @var string ApplicationKey */
const ApplicationKey = 'application_key';
/** @var string Endpoint */
const Endpoint = 'endpoint';
/** @var string 区域 */
const Region = 'region';
/** @var string Bucket */
const Bucket = 'bucket';
}
|
- 增加一个枚举常量
打开 app/Enums/StrategyKey.php
文件追加一行
1
2
3
4
| // ...
/** @var int Backblaze */
const Backblaze = 11;
// ...
|
此常量值可以自定义,但不要和其他常量值重复。
- 更改图片服务类中的
getAdapter
方法
打开 app/Services/ImageService.php
文件定位到 getAdapter
方法,你可以看到所有储存策略都是通过这个方法进行实例化的。 我们来增加一个 adapter
,在 match
表达式中追加内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| // ...
use App\Enums\Strategy\BackblazeOption;
// ....
StrategyKey::Backblaze => new AwsS3V3Adapter(
client: new S3Client([
'credentials' => [
'key' => $configs->get(BackblazeOption::KeyId),
'secret' => $configs->get(BackblazeOption::ApplicationKey)
],
'endpoint' => $configs->get(BackblazeOption::Endpoint),
'region' => $configs->get(BackblazeOption::Region),
'version' => '2006-03-01',
]),
bucket: $configs->get(BackblazeOption::Bucket),
options: ['params' => ['ACL' => '']], //B2没有ACL配置,故稍加修改
),
// ...
|
- 给模型中的驱动常量加上自定义储存
打开 app/Models/Strategy.php
文件,在 DRIVERS
常量中追加一行
1
2
3
4
5
6
| // ...
const DRIVERS = [
// ...
StrategyKey::Backblaze => 'Backblaze',
];
// ...
|
- 修改表单验证器
打开 app/Http/Requests/Admin/StrategyRequest.php
文件, 在 rules
方法里追加验证内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| // ...
return array_merge($array, match((int)$this->input('key')) {
// ...
StrategyKey::Backblaze => [
'configs.key_id' => 'required',
'configs.application_key' => 'required',
'configs.endpoint' => '',
'configs.region' => '',
'configs.bucket' => 'required',
],
});
// ...
|
验证规则请参考 Laravel 官方文档
- 增加 web 设置表单页面
打开 resources/views/admin/strategy/add.blade.php
和 resources/views/admin/strategy/edit.blade.php
参考其他的储存策略表单,例如 minio
,一一修改以下两项文件即可:
- 添加页面:
add.blade.php
- 编辑页面:
edit.blade.php
推荐复制Minio配置文件,并将所有 minio
字样改成 backblaze
,AccessKey/access_key
修改成 KeyID/key_id
, SecretKey/secret_key
修改成 ApplicationKey/application_key
。
验证
在后台创建一个新的存储策略。
填写B2相关信息进行测试。
教程到此结束。
复制粘贴果然简单,我这种水货都能搞,又水了一篇,开心