نسخه:

سیستم فایل / ذخیره سازی ابری

معرفی

لاراول به لطف بسته PHP Flysystem توسط Frank de Jonge یک انتزاع سیستم فایل فوق العاده را ارائه می دهد. ادغام Laravel Flysystem درایورهای ساده ای را برای کار با فایل سیستم های محلی، Amazon S3 و Rackspace Cloud Storage فراهم می کند. حتی بهتر از آن، جابه‌جایی بین این گزینه‌های ذخیره‌سازی بسیار ساده است، زیرا API برای هر سیستم یکسان باقی می‌ماند!

پیکربندی

فایل پیکربندی فایل سیستم در آدرس قرار دارد config/filesystems.php . در این فایل می‌توانید تمام «دیسک‌های» خود را پیکربندی کنید. هر دیسک نشان دهنده یک درایور ذخیره سازی و مکان ذخیره سازی خاص است. نمونه تنظیمات برای هر درایور پشتیبانی شده در فایل پیکربندی گنجانده شده است. بنابراین، به سادگی پیکربندی را تغییر دهید تا ترجیحات ذخیره سازی و اعتبار شما را منعکس کند!

قبل از استفاده از درایورهای S3 یا Rackspace، باید بسته مناسب را از طریق Composer نصب کنید:

  • آمازون S3: league/flysystem-aws-s3-v2 ~1.0
  • فضای قفسه: league/flysystem-rackspace ~1.0

البته، می‌توانید هر تعداد دیسک را که دوست دارید پیکربندی کنید، و حتی ممکن است چندین دیسک داشته باشید که از یک درایور استفاده می‌کنند.

هنگام استفاده از local درایور، توجه داشته باشید که تمام عملیات فایل مربوط به root دایرکتوری تعریف شده در فایل پیکربندی شما است. به طور پیش فرض، این مقدار روی storage/app دایرکتوری تنظیم می شود. بنابراین، روش زیر یک فایل را در storage/app/file.txt :

Storage::disk('local')->put('file.txt', 'Contents');

استفاده پایه

نما Storage ممکن است برای تعامل با هر یک از دیسک های پیکربندی شده شما استفاده شود. Illuminate\Contracts\Filesystem\Factory از طرف دیگر، می‌توانید قرارداد را روی هر کلاسی که از طریق کانتینر سرویس لاراول حل می‌شود ، تایپ کنید .

بازیابی یک دیسک خاص

$disk = Storage::disk('s3');
 
$disk = Storage::disk('local');

تعیین اینکه آیا یک فایل وجود دارد

$exists = Storage::disk('s3')->exists('file.jpg');

فراخوانی روش ها در دیسک پیش فرض

if (Storage::exists('file.jpg'))
{
//
}

بازیابی محتویات یک فایل

$contents = Storage::get('file.jpg');

تنظیم محتویات یک فایل

Storage::put('file.jpg', $contents);

Prepend To A File

Storage::prepend('file.log', 'Prepended Text');

افزودن به یک فایل

Storage::append('file.log', 'Appended Text');

حذف یک فایل

Storage::delete('file.jpg');
 
Storage::delete(['file1.jpg', 'file2.jpg']);

یک فایل را در یک مکان جدید کپی کنید

Storage::copy('old/file1.jpg', 'new/file1.jpg');

انتقال یک فایل به مکان جدید

Storage::move('old/file1.jpg', 'new/file1.jpg');

دریافت اندازه فایل

$size = Storage::size('file1.jpg');

دریافت آخرین زمان اصلاح (یونیکس)

$time = Storage::lastModified('file1.jpg');

دریافت همه فایل ها در یک فهرست

$files = Storage::files($directory);
 
// Recursive...
$files = Storage::allFiles($directory);

همه فهرست ها را در یک فهرست دریافت کنید

$directories = Storage::directories($directory);
 
// Recursive...
$directories = Storage::allDirectories($directory);

یک دایرکتوری ایجاد کنید

Storage::makeDirectory($directory);

یک فهرست را حذف کنید

Storage::deleteDirectory($directory);

فایل سیستم های سفارشی

ادغام Flysystem لاراول درایورهایی را برای چندین "راننده" خارج از جعبه فراهم می کند. با این حال، Flysystem به این موارد محدود نمی شود و برای بسیاری از سیستم های ذخیره سازی دیگر آداپتورهایی دارد. اگر می خواهید از یکی از این آداپتورهای اضافی در برنامه لاراول خود استفاده کنید، می توانید یک درایور سفارشی ایجاد کنید. نگران نباشید، خیلی سخت نیست!

برای راه اندازی فایل سیستم سفارشی باید یک ارائه دهنده خدمات مانند ایجاد کنید DropboxFilesystemServiceProvider . در روش ارائه دهنده boot می توانید نمونه ای از Illuminate\Contracts\Filesystem\Factory قرارداد را تزریق کنید و extend روش نمونه تزریق شده را فراخوانی کنید. همچنین می توانید از روش Disk نما استفاده کنید extend .

اولین آرگومان متد extend نام درایور و دومین آرگومان Closure است که متغیرهای $app و را دریافت می کند $config . حل‌کننده بستن باید نمونه‌ای از League\Flysystem\Filesystem .

توجه: متغیر $config از قبل حاوی مقادیر تعریف شده config/filesystems.php برای دیسک مشخص شده خواهد بود.

نمونه دراپ باکس

<?php namespace App\Providers;
 
use Storage;
use League\Flysystem\Filesystem;
use Dropbox\Client as DropboxClient;
use League\Flysystem\Dropbox\DropboxAdapter;
use Illuminate\Support\ServiceProvider;
 
class DropboxFilesystemServiceProvider extends ServiceProvider {
 
public function boot()
{
Storage::extend('dropbox', function($app, $config)
{
$client = new DropboxClient($config['accessToken'], $config['clientIdentifier']);
 
return new Filesystem(new DropboxAdapter($client));
});
}
 
public function register()
{
//
}
 
}