ijin82/flysystem-azure

Laravel 5.* 的 Windows Azure 适配器(league/flysystem-azure 的分支)

1.0.7.1 2018-02-26 13:09 UTC

This package is auto-updated.

Last update: 2024-09-29 05:14:36 UTC


README

Software License Total Downloads

Azure Blob 专用文件系统,用于 Laravel 5

此仓库是 League\Flysystem\Azure 的分支

为什么要分支?

需要与 L5 无缝集成,并为 Storage 接口提供 url 方法
以下所有示例都与 L5 相关。

如何在 Laravel 5 应用程序中安装

安装包

composer require ijin82/flysystem-azure

打开 config/app.php 并将以下内容添加到 providers 部分

Ijin82\Flysystem\Azure\AzureBlobServiceProvider::class,

打开 config/filesystems.php 并将以下内容添加到 disks 部分

'my_azure_disk1' => [
    'driver' => 'azure_blob',
    'endpoint' => env('AZURE_BLOB_STORAGE_ENDPOINT'),
    'container' => env('AZURE_BLOB_STORAGE_CONTAINER1'),
    'blob_service_url' => env('AZURE_BLOB_SERVICE_URL'),
],

打开您的 .env 并为您的磁盘添加变量

AZURE_BLOB_SERVICE_URL={your-blob-service-url}
AZURE_BLOB_STORAGE_ENDPOINT="DefaultEndpointsProtocol=https;AccountName={your-account-name};AccountKey={your-account-key};"
AZURE_BLOB_STORAGE_CONTAINER1={your-container-name}
  1. 您可以从存储账户设置的 属性 部分获取 AZURE_BLOB_SERVICE_URL 变量。这是一个名为 PRIMARY BLOB SERVICE ENDPOINTSECONDARY BLOB SERVICE ENDPOINT 的 URL
  2. 您可以从存储账户设置的 访问密钥 部分获取 AZURE_BLOB_STORAGE_ENDPOINT 变量。这被称为 CONNECTION STRING
  3. AZURE_BLOB_STORAGE_CONTAINER1 是您预先创建的容器名称,您可以在存储账户设置的 概览 部分中添加。

如何上传文件

public function someUploadFuncName(Request $request)
{
    $file = $request->file('file_name_from_request');  
    
    // .. file name logic
    // .. file folder logic
    
    $file->storeAs($fileFolder, $fileName, [
        'disk' => 'my_azure_disk1'
    ]);  
    
    // save file name logic
    // to create file URL by name later
    // maybe you want to save file name and folder separated
    $fileNameToSave = $folderName . '/' . $diskFileName;
    
    // .. save file name to DB or etc.
}

如何获取文件 URL

我们获取了所选磁盘的文件名(如果存在文件夹,则相关文件夹)

echo Storage::disk('my_azure_disk1')->url($fileName);

这也可以在 blade 模板中工作,如下所示

<a href="{{ Storage::disk('my_azure_disk1')->url($fileName) }}"
    target="_blank">{{ $fileName }}</a>

如何删除文件

public function someDeleteFuncName($id)
{
    $file = SomeFileModel::findOrFail($id);
    Storage::disk('my_azure_disk1')->delete($file->name);
    $file->delete();

    // go back or etc..
}

Mimetypes(这可能很有用)

有时您需要手动设置 mime 类型(可能是为了 CDN)以获取正确的 mime 类型值。您可以这样做(例如,强制设置一些类型)

$fileConents = Storage::disk('public_or_another_local_disk')->get($file);

$forcedMimes = [
    'js' => 'application/javascript',
    'json' => 'application/json',
];

$fileExt = \File::extension($file);

if (array_key_exists($fileExt, $forcedMimes)) {
    $fileMime = $forcedMimes[$fileExt];
} else {
    $fileMime = mime_content_type(Storage::disk('public_or_another_local_disk')->path($file));
}

Storage::disk('my_custom_azure_disk')->put($fileName, $fileConents, [
    'mimetype' => $fileMime,
]);

您可以使用 wget 获取包含 Content-Type 头的响应

wget -S https://your-file-host.com/file-name.jpg

补充

  1. 原始仓库在此:这里
  2. 如何从 PHP 使用 Blob 存储
  3. Flysystem azure 适配器
  4. 请随意发送 pull 请求和问题。