steppinghat/backblaze-b2-bundle

用于与 Backblaze B2 API 交互的 Symfony 兼容包

1.0.1 2022-06-14 04:45 UTC

This package is auto-updated.

Last update: 2024-09-14 09:45:45 UTC


README

Latest Stable Version Total Downloads License PHP Version Require

📼 Backblaze B2 API 客户端服务,适用于 Symfony 项目

安装

要在您的 Symfony 项目目录中安装此包,请运行以下命令:

$ composer require steppinghat/backblaze-b2-bundle

然后在 config/bundles.php 中注册该包

<?php

return [
    // ...
    SteppingHat\BackblazeB2\BackblazeB2Bundle::class => ['all' => true]
]

最后,在 config/packages 中创建一个名为 backblaze_b2.yaml 的配置文件

backblaze_b2:
  account_id: '%env(BACKBLAZE_MASTER_ACCOUNT_ID)%'
  application_id: '%env(BACKBLAZE_MASTER_APPLICATION_ID)%'
  application_secret: '%env(BACKBLAZE_MASTER_APPLICATION_KEY)%'
  token_cache_directory: ~

配置

Backblaze API 密钥

在开始之前,您需要通过访问您的 Backblaze 账户中的 App Keys 来创建一个密钥。

并非所有密钥都是平等的!

您可以使用应用程序密钥,但是与主应用程序密钥相比,其功能非常有限。请记住这一点,当配置包时。

缓存令牌

为了减少 API 调用次数并加快整体周转时间,我们可以选择将令牌缓存在磁盘上。这意味着我们不需要每次执行请求时都请求认证令牌,而是使用之前缓存的令牌。这些令牌在到期前大约持续 12 小时,之后需要新的令牌。

虽然这可能更可取,但有些人可能不喜欢将令牌保存到磁盘上的想法,出于安全原因。如果您的系统安全良好,并且这不太可能成为风险,请通过将 tokenCacheDirectory 设置为具有写入权限的有效目录来启用此功能。

运行 php bin/console cache:clear 不会清除此缓存

使用

对于 API 的所有基本使用,只需在您的服务中使用 BackblazeClient 类即可。

<?php

use SteppingHat\BackblazeB2\Client\BackblazeClient;

class ExampleService {

    protected BackblazeClient $client;

    public function __construct(BackblazeClient $client) {
        $this->client = $client;    
    }
    
}

创建存储桶

需要 writeBuckets 能力

$bucket = $client->createBucket('bucketName', Bucket::TYPE_PRIVATE);

列出所有存储桶

需要 listBuckets 能力

$buckets = $client->listBuckets();

更新存储桶

需要 writeBuckets 能力

$bucket = $client->updateBucket($bucket, Bucket::TYPE_PUBLIC);

删除存储桶

需要 deleteBuckets 能力

$client->deleteBucket($bucket);

列出所有文件

需要 listFiles 能力

// List all files across all buckets
$files = $client->listFiles();

// List all files in a specific bucket
$files = $client->listFiles($bucket);

// Search for a specific file
$files = $client->listFiles($bucket, 'animals/dogs/floof.png');

// Search for all files matching a prefix
$files = $client->listFiles($bucket, null, 'animals/dogs/');

检查文件是否存在

需要 listFiles 能力

if($client->fileExists($bucket, 'animals/dogs/doggo.jpg')) {
    // ...
}

获取文件信息

需要 readFiles 能力

$file = $client->getFileInfo($file);
// or
$file = $client->getFileInfoById($fileId);

删除文件

需要 deleteFiles 能力

$client->deleteFile($file);

如果文件有治理限制,具有 bypassGovernance 能力的访问密钥可以强制删除文件。

$client->deleteFile($file, true);

上传文件

需要 writeFiles 能力

可以通过传递字符串内容来上传文件

$fileContent = 'Hello world!';
// or
$fileContent = file_get_contents('hello.txt');
$client->upload($bucket, $fileContent, 'files/hello.txt');

或者可以通过资源传递文件

$file = fopen('smoldoggo.png', 'r');
$client->upload($bucket, $file, 'animals/dogs/smoldoggo.png');

⚠ 资源内容在发送之前被加载到内存中。这是由于 Symfony HttpClient 库在内容之后发送头部的限制,而 Backblaze API 需要在内容之前。因此,我们无法直接将资源直接传递给 Backblaze。这目前是一个 //TODO,需要找到解决方案。如果您打算上传大文件,这可能会成为一个问题。

下载文件

需要 readFiles 能力

下载的内容被简单地返回到变量中

$content = $client->download($file);
echo $file;
// Hello world!

但也可以直接传递到资源中

$resource = fwrite('/tmp/smoldoggo.png', 'w');
$client->download($file, $resource);
fclose($resource);

测试

关于测试,没有测试。 (Boooo)。

这个库仍在开发中,因为我还没有完全支持 B2 API,也没有解决所有问题(例如上传资源)。

大部分功能都正常工作(我在自己的应用程序中使用过它),我想这可以算是一种保证吧?

但请放心,一旦我进一步完善了这个库,就会有测试 - 我保证!

许可协议

由 Javan Eskander 爱心制作

可在MIT许可下使用。