Skip to content

danielebriggi/flysystem-azure

 
 

Repository files navigation

Software License

Azure Blob custom filesystem for Laravel 5

This repo is fork of League\Flysystem\Azure [BETA]

Why forked?

Need to integrate with L5 out of the box, and url method for Storage interface
All examples below L5 related.

How to install in Laravel 5 application

Install package

composer require ijin82/flysystem-azure

Open config/app.php and add this to providers section

Ijin82\Flysystem\Azure\AzureBlobServiceProvider::class,

Open config/filesystems.php and add this stuff to disks section

'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'),
],

Open your .env and add variables for your disk

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. You can get AZURE_BLOB_SERVICE_URL variable from Properties section of your Storage account settings. That is an url named PRIMARY BLOB SERVICE ENDPOINT or SECONDARY BLOB SERVICE ENDPOINT
  2. You can get AZURE_BLOB_STORAGE_ENDPOINT variable from Access keys section of your Storage account settings. That is named CONNECTION STRING
  3. AZURE_BLOB_STORAGE_CONTAINER1 is the name of your pre-created container, that you can add at Overview section of your Storage account settings.

How to upload file

public function someUploadFuncName(Request $request)
{
    $file = $request->file('file_name_from_request');
    // check mime type
    if ($file->getClientMimeType() == 'application/x-font-ttf') {

        // feel free to change this logic, that is an example
        $baseFileName = strtolower($file->getClientOriginalName());
        $ext = strtolower($file->getClientOriginalExtension());
        $filenameWithoutExt = preg_replace("~\." . $ext . "$~i", '', $baseFileName);
        $diskFileName = $font->id . '-' . preg_replace_array([
                "~[\r\n\t ]~",
                "~[^a-z0-9\_\-]~",
            ], [
                "_",
                "_",
            ],
            $filenameWithoutExt
            ) . '.' . $ext;
        // folder name in container, could be empty
        $folderName='some-folder-name';
        
        // store file on azure blob
        $file->storeAs($folderName, $diskFileName, ['disk' => 'account_fonts']);

        // save file name somewhere
        $saveFileName = $folderName . '/' . $diskFileName;
    }
    
    // go back or etc..
}

How to get file URL

We got file name for selected disk (folder related if folder exists)

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

That is also working in blade templates like this

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

How to delete file

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

    // go back or etc..
}

Additions

  1. Original repo is here
  2. How to use blob storage from PHP
  3. Flysystem azure adapter
  4. Feel free to send pull requests and issues.

About

Flysystem adapter for the Windows Azure.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%