Lsky Pro 企业版添加Backblaze存储策略

开源版方法也是一样的。

# 前言

做图床这玩意儿,存储和流量成本都不低。所以我就去寻找廉价存储去了。然后发现了buyvm,256G存储每月只要1.25刀,还支持支付宝,实在是香啊。但是掉盘的情况比比皆是,而我是很看中数据的可用性的,故就此排除buyvm。

我还知道另外一家廉价存储,Backblaze。与buyvm价格几乎一致,却能提供较为稳定的对象存储服务。我顺带看了一下网友们的评论,挺不错的。于是就想着为图床增加Backblaze的存储策略,以便后续添加、修改。

# 参考

Lsky Pro 官方文档 - 如何自定义一个储存

如何使用 AWS s3 协议连接 backblaze b2

# 动手

  1. 增加一个枚举类

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';
}
  1. 增加一个枚举常量

打开 app/Enums/StrategyKey.php 文件追加一行

1
2
3
4
// ...
/** @var int Backblaze */
const Backblaze = 11;
// ...

此常量值可以自定义,但不要和其他常量值重复。

  1. 更改图片服务类中的 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配置,故稍加修改
),
// ...
  1. 给模型中的驱动常量加上自定义储存

打开 app/Models/Strategy.php 文件,在 DRIVERS 常量中追加一行

1
2
3
4
5
6
// ...
const DRIVERS = [
    // ...
    StrategyKey::Backblaze => 'Backblaze',
];
// ...
  1. 修改表单验证器

打开 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 官方文档

  1. 增加 web 设置表单页面

打开 resources/views/admin/strategy/add.blade.phpresources/views/admin/strategy/edit.blade.php 参考其他的储存策略表单,例如 minio ,一一修改以下两项文件即可:

  • 添加页面:add.blade.php
  • 编辑页面:edit.blade.php

推荐复制Minio配置文件,并将所有 minio 字样改成 backblazeAccessKey/access_key 修改成 KeyID/key_id, SecretKey/secret_key 修改成 ApplicationKey/application_key

# 验证

在后台创建一个新的存储策略。

存储策略
存储策略

填写B2相关信息进行测试。

填写信息
填写信息

成功上传
成功上传
访问正常
访问正常

教程到此结束。

复制粘贴果然简单,我这种水货都能搞,又水了一篇,开心

使用 Hugo 构建
主题 StackJimmy 设计