steppinghat / backblaze-b2-bundle
用于与 Backblaze B2 API 交互的 Symfony 兼容包
Requires
- php: >=7.4
- symfony/cache: ^5.4
- symfony/config: ^5.4
- symfony/dependency-injection: ^5.4
- symfony/framework-bundle: ^5.4
- symfony/http-client: ^5.4
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/var-dumper: ^5.4
This package is auto-updated.
Last update: 2024-09-14 09:45:45 UTC
README
📼 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许可下使用。