Penyimpanan fail
- Konfigurasi
- Keterlihatan Fail
- Padam Fail
- Direktori
- Sistem Fail
- Pengenalan kepada Laravel Menyediakan fail yang berkuasa abstraksi sistem, yang membolehkan Manfaat daripada pek pengembangan Konfigurasi
- Fail konfigurasi untuk sistem fail terletak di . Dalam fail ini anda boleh mengkonfigurasi semua "cakera". Setiap cakera mewakili pemacu storan dan lokasi storan tertentu. Konfigurasi sampel untuk setiap pemacu yang disokong disertakan dalam fail konfigurasi. Oleh itu, hanya ubah suai konfigurasi untuk mencerminkan pilihan storan dan kelayakan anda. Sudah tentu, anda boleh mengkonfigurasi berbilang cakera mengikut keperluan, malah anda boleh membuat berbilang cakera berkongsi pemacu yang sama.
Public Disk
awam cakera adalah untuk fail yang boleh diakses secara umum. Secara lalai, cakera awam
menggunakan pemaculocal
dan menyimpan fail ini dalam direktoristorage/app/public
. Untuk menjadikannya boleh diakses melalui rangkaian, anda perlu membuat pautan simbolik daripadapublic/storage
kestorage/app/public
. Pendekatan ini menyimpan fail yang boleh diakses secara umum dalam direktori yang sama, supaya apabila menggunakan sistem kerahan masa sifar seperti Envoyer Kongsi fail ini dengan mudah antara penempatan yang berbeza. Anda boleh menggunakan perintah Artisanstorage:link
untuk membuat pautan simbolik:public
磁盘适用于要公开访问的文件。默认情况下,public
磁盘使用local
驱动,并且将这些文件存储在storage/app/public
目录下。为了使它们能通过网络访问,你需要创建public/storage
到storage/app/public
的符号链接。这种方式能把可公开访问文件都保留在同一个目录下,以便在使用零停机时间部署系统如 Envoyer 的时候,就可以轻松地在不同的部署之间共享这些文件。你可以使用 Artisan 命令storage:link
来创建符号链接:你可以使用 Artisan 命令
storage:link
来创建符号链接:php artisan storage:link
当然,一旦一个文件被存储并且已经创建了符号链接,你就可以使用辅助函数
asset
来创建文件的 URL:echo asset('storage/file.txt');
本地驱动
使用
local
驱动时,所有文件操作都与你在配置文件中定义的root
目录相关。该目录的默认值是storage/app
。因此,以下方法会把文件存储在storage/app/file.txt
中:Storage::disk('local')->put('file.txt', 'Contents');
驱动程序先决条件
Composer 包
在使用 SFTP、S3 或 Rackspace 等驱动之前,你需要通过 Composer 安装相应的软件包:
- SFTP:
league/flysystem-sftp ~1.0
- Amazon S3:
league/flysystem-aws-s3-v3 ~1.0
- Rackspace:
league/flysystem-rackspace ~1.0
使用缓存适配器是提高性能的一个绝对必要条件。你需要一个额外的包:
- CachedAdapter:
league/flysystem-cached-adapter ~1.0
S3 驱动配置
S3 驱动配置信息位于你的
config/filesystems.php
配置文件中。该文件包含 S3 驱动程序的示例配置数组。 你可以自由使用你自己的 S3 配置和凭证修改此阵列。 为方便起见,这些环境变量与 AWS CLI 使用的命名约定相匹配。FTP 驱动配置
Laravel 的文件系统集成能很好的支持 FTP,不过 FTP 的配置示例并没有被包含在框架默认的
Anda boleh menggunakan perintah Artisanfilesystems.php
storage:link
untuk mencipta pautan simbolik:Of sudah tentu, sebaik sahaja fail disimpan dan pautan simbolik telah dibuat, anda boleh menggunakan fungsi pembantu'ftp' => [ 'driver' => 'ftp', 'host' => 'ftp.example.com', 'username' => 'your-username', 'password' => 'your-password', // 可选的 FTP 配置项... // 'port' => 21, // 'root' => '', // 'passive' => true, // 'ssl' => true, // 'timeout' => 30, ],
aset
untuk mencipta URL fail: 🎜'sftp' => [ 'driver' => 'sftp', 'host' => 'example.com', 'username' => 'your-username', 'password' => 'your-password', // 基于 SSH 密钥的身份验证设置... // 'privateKey' => '/path/to/privateKey', // 'password' => 'encryption-password', // 可选的 SFTP 配置... // 'port' => 22, // 'root' => '', // 'timeout' => 30, ],
🎜🎜< div name="3370e9" data-unique="3370e9">🎜🎜Pemandu tempatan🎜🎜Apabila menggunakan pemaculocal
, semua operasi fail adalah sama seperti < kod>root yang anda takrifkan dalam kod fail konfigurasi> direktori berkaitan. Nilai lalai untuk direktori ini ialahstorage/app
. Oleh itu, kaedah berikut akan menyimpan fail dalamstorage/app/file.txt
: 🎜'rackspace' => [ 'driver' => 'rackspace', 'username' => 'your-username', 'key' => 'your-key', 'container' => 'your-container', 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', 'region' => 'IAD', 'url_type' => 'publicURL', ],
🎜🎜🎜🎜Prasyarat pemandu🎜🎜Pakej komposer
🎜Apabila menggunakan pemacu seperti SFTP, S3 atau Rackspace Sebelum ini , anda perlu memasang pakej perisian yang sepadan melalui Composer: 🎜- SFTP:
league/flysystem-sftp ~1.0
- Amazon S3:
league/ flysystem-aws-s3-v3 ~1.0
- Rackspace:
league/flysystem-rackspace ~1.0
- CachedAdapter:
league/flysystem-cached-adapter ~1.0
🎜Konfigurasi pemacu S3
🎜Maklumat konfigurasi pemacu S3 terdapat dalam fail konfigurasiconfig/filesystems.php
anda. Fail ini mengandungi contoh tatasusunan konfigurasi untuk pemacu S3. Anda bebas untuk mengubah suai tatasusunan ini dengan konfigurasi dan kelayakan S3 anda sendiri. Untuk kemudahan, pembolehubah persekitaran ini sepadan dengan konvensyen penamaan yang digunakan oleh AWS CLI. 🎜🎜Konfigurasi pemacu FTP
🎜Penyepaduan sistem fail Laravel boleh menyokong FTP dengan baik, tetapi contoh konfigurasi FTP tidak disertakan Rangka kerja lalai < code>filesystems.php fail. Anda boleh menggunakan konfigurasi contoh berikut jika perlu: 🎜's3' => [ 'driver' => 's3', // 驱动器其他配置... 'cache' => [ 'store' => 'memcached', 'expire' => 600, 'prefix' => 'cache-prefix', ], ],
🎜🎜Konfigurasi pemacu SFTP
Pakej integrasi Flysystem Laravel berfungsi dengan baik dengan SFTP walau bagaimanapun, tiada konfigurasi sampel disertakan dalam fail konfigurasi lalai rangka kerja
filesystems.php
. Jika anda ingin mengkonfigurasi sistem fail SFTP, anda boleh menggunakan konfigurasi contoh berikut:filesystems.php
中并没有包含示范配置。如果要配置 SFTP 文件系统,可以使用如下示例配置:use Illuminate\Support\Facades\Storage; Storage::put('avatars/1', $fileContents);
Rackspace 驱动器配置
Laravel 的 Flysystem 集成包与 Rackspace 协同得非常好;不过,在该框架的默认配置文件
filesystems.php
中并没有包含示范配置。如果要配置 Rackspace 文件系统,可以使用如下示例配置:Storage::disk('s3')->put('avatars/1', $fileContents);
缓存
给指定磁盘开启缓存功能,需要在该磁盘的配置项中直接添加
cache
。cache
选项应该是一个缓存配置的数组,由缓存驱动名称store
(译者注:文档原始描述文字disk
与示例代码中的store
不一致,验证代码后的确应该是store
,故作此修改。)、 单位为秒的过期时间expire
,以及缓存前缀prefix
组成:$contents = Storage::get('file.jpg');
获取磁盘实例
Storage
门面可用于与任何已配置的磁盘进行交互。例如,你可以使用门面中的put
方法将头像存储到默认磁盘。如果你使用Storage
门面中的任何方法,而一开始并没有使用disk
方法,那么所调用的方法会自动传递给默认的磁盘:$exists = Storage::disk('s3')->exists('file.jpg');
如果应用程序要与多个磁盘进行互操作,可使用
Storage
门面中的disk
方法对特定磁盘上的文件进行操作:return response()->download('file.jpg'); return response()->download('file.jpg', $name, $headers);
检索文件
get
方法可以用于检索文件的内容,此方法返回该文件的原始字符串内容。 切记,所有文件路径的指定都应该相对于为磁盘配置的「root」目录:use Illuminate\Support\Facades\Storage; $url = Storage::url('file.jpg');
exists
方法可以用来判断磁盘上是否存在指定的文件:$url = Storage::temporaryUrl( 'file.jpg', now()->addMinutes(5) );
下载文件
download
方法可用于生成一个响应,强制用户的浏览器在给定路径下载文件。download
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],
Konfigurasi pemacu RackspacePakej integrasi Flysystem Laravel berfungsi dengan baik dengan Rackspace; walau bagaimanapun, fail konfigurasi lalai rangka kerja
filesystems.php
tidak mengandungi konfigurasi sampel. Jika anda ingin mengkonfigurasi sistem fail Rackspace, anda boleh menggunakan konfigurasi contoh berikut:use Illuminate\Support\Facades\Storage; $size = Storage::size('file.jpg');
🎜🎜Caching
🎜Untuk mendayakan fungsi cache bagi cakera yang ditentukan, anda perlu menambahcache
terus pada item konfigurasi cakera. Pilihancache
hendaklah susunan konfigurasi cache, didorong oleh nama pemacu cachestore
(Nota Penterjemah: Teks penerangan asal dokumendisk
adalah sama seperti dalam contoh kodstore
tidak konsisten Selepas mengesahkan kod, ia sepatutnya menjadistore
, jadi pengubahsuaian ini dibuat), masa tamat tempoh. saattamat tempoh dan awalan cache awalan terdiri daripada: 🎜 $time = Storage::lastModified('file.jpg');
🎜🎜🎜🎜Dapatkan contoh cakera
🎜FasadStoran boleh digunakan untuk berinteraksi dengan mana-mana cakera yang dikonfigurasikan. Sebagai contoh, anda boleh menggunakan kaedah let
dalam fasad untuk menyimpan avatar ke cakera lalai. Jika anda menggunakan sebarang kaedah dalam fasadStorage
tanpa menggunakan kaedahcake
pada mulanya, kaedah yang dipanggil akan dihantar secara automatik ke cakera lalai: 🎜use Illuminate\Support\Facades\Storage; Storage::put('file.jpg', $contents); Storage::put('file.jpg', $resource);
🎜If To interoperate with multiple cakera, aplikasi boleh menggunakan kaedahdisk
dalam fasadStorage
untuk beroperasi pada fail pada cakera tertentu: 🎜use Illuminate\Http\File; use Illuminate\Support\Facades\Storage; // 自动为文件名生成唯一的ID... Storage::putFile('photos', new File('/path/to/photo')); // 手动指定文件名... Storage::putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');
🎜🎜 🎜🎜Mendapatkan semula fail
🎜 Kaedahget
boleh digunakan untuk mendapatkan semula kandungan fail, Kaedah ini mengembalikan kandungan rentetan asal fail. Ingat, semua spesifikasi laluan fail hendaklah relatif kepada direktori "root" yang dikonfigurasikan untuk cakera: 🎜Storage::putFile('photos', new File('/path/to/photo'), 'public');
🎜wujud Kaedah boleh digunakan untuk menentukan sama ada fail yang ditentukan wujud pada cakera: 🎜 Storage::prepend('file.log', 'Prepended Text'); Storage::append('file.log', 'Appended Text');
🎜 🎜🎜🎜Memuat turun fail
🎜muat turun kaedah boleh digunakan untuk menjana respons, Memaksa pelayar pengguna memuat turun fail pada laluan tertentu. Kaedah muat turun
menerima nama fail sebagai parameter kedua kaedah, yang akan menentukan nama fail yang pengguna lihat apabila mereka memuat turun fail. Akhir sekali, anda boleh menghantar pengepala tatasusunan HTTP sebagai hujah ketiga kepada kaedah: 🎜Storage::copy('old/file.jpg', 'new/file.jpg'); Storage::move('old/file.jpg', 'new/file.jpg');
🎜🎜🎜🎜🎜🎜URL Fail
Anda boleh menggunakan kaedah
url
untuk mendapatkan URL fail yang diberikan. Jika anda menggunakan pemaculocal
, anda biasanya hanya menambah/storage
pada laluan yang diberikan dan mengembalikan URL relatif kepada fail tersebut. Jika anda menggunakan pemacus3
ataurackspace
, URL jauh yang lengkap akan dikembalikan:url
方法来获取给定文件的 URL。如果你使用的时local
驱动,一般只是在给定的路径上加上/storage
并返回一个相对的 URL 到那个文件。如果使用的是s3
或者是rackspace
驱动,会返回完整的远程 URL:<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class UserAvatarController extends Controller{ /** * 更新用户头像. * * @param Request $request * @return Response */ public function update(Request $request) { $path = $request->file('avatar')->store('avatars'); return $path; } }
{note} 切记,如果使用的是
local
驱动,则所有想被公开访问的文件都应该放在storage/app/public
目录下。此外你应该在public/storage
创建一个符号链接 来指向storage/app/public
目录。临时 URLs
当使用
s3
或rackspace
驱动来存储文件,可以使用temporaryUrl
方法创建给定文件的临时 URL。这个方法会接收路径和DateTime
实例来指定 URL 何时过期:$path = Storage::putFile('avatars', $request->file('avatar'));
自定义本地 URL 主机
如果要使用
local
驱动为存储在磁盘上的文件预定义主机,可以向磁盘配置数组添加一个url
选项:$path = $request->file('avatar')->storeAs('avatars', $request->user()->id);
文件元数据
除了读写文件外,Laravel 还可以提供有关文件本身的信息,例如,
size
方法可用来获取文件的大小(以字节为单位):$path = Storage::putFileAs('avatars', $request->file('avatar'), $request->user()->id);
lastModified
方法返回文件最后一次被修改的 UNIX 时间戳:$path = $request->file('avatar')->store('avatars/'.$request->user()->id, 's3');
保存文件
put
方法可用于将原始文件内容保存到磁盘上。你也可以传递 PHP 的resource
给put
use Illuminate\Support\Facades\Storage; Storage::put('file.jpg', $contents, 'public');
{note} Ingat, jika anda menggunakan
pemacu
tempatan, semua fail yang ingin diakses secara umum hendaklah diletakkan dalam direktoristorage/app/public
. Selain itu, anda harus membuat pautan simbolik dalampublic/storage
untuk menunjuk kestorage/app/public
direktori.URL Sementara
🎜Apabila menggunakans3
ataurackspace
Pemacu untuk menyimpan fail, anda boleh menggunakan kaedahtemporaryUrl
untuk mencipta URL sementara untuk fail tertentu. Kaedah ini menerima laluan dan contohDateTime
untuk menentukan bila URL akan tamat tempoh: 🎜$visibility = Storage::getVisibility('file.jpg'); Storage::setVisibility('file.jpg', 'public')
🎜Hos URL tempatan tersuai< / h4>🎜Jika anda ingin menggunakan pemacu
local
untuk mentakrifkan hos bagi fail yang disimpan pada cakera, anda boleh menambah pilihanurl
pada tatasusunan konfigurasi cakera: 🎜use Illuminate\Support\Facades\Storage; Storage::delete('file.jpg'); Storage::delete(['file.jpg', 'file2.jpg']);
🎜 🎜🎜🎜Metadata fail🎜🎜Selain membaca dan menulis fail, Laravel juga boleh memberikan maklumat tentang fail itu sendiri, seperti , kaedahsaiz
boleh digunakan untuk mendapatkan saiz fail (dalam bait): 🎜use Illuminate\Support\Facades\Storage; Storage::disk('s3')->delete('folder_path/file_name.jpg');
🎜 KaedahlastModified
mengembalikan cap masa UNIX bagi kali terakhir fail itu diubah suai: 🎜use Illuminate\Support\Facades\Storage; $files = Storage::files($directory); $files = Storage::allFiles($directory);
🎜 🎜🎜Menyimpan fail
🎜 Kaedahput
Boleh digunakan untuk menyimpan kandungan fail asal ke cakera. Anda juga boleh menghantarsumber
PHP kepada kaedahput
, yang akan menggunakan sokongan aliran asas di bawah sistem fail. Sangat disyorkan untuk menggunakan kaedah ini apabila bekerja dengan fail besar: 🎜$directories = Storage::directories($directory); // 递归... $directories = Storage::allDirectories($directory);
🎜🎜Penstriman Automatik
Jika anda mahu Laravel menstrim fail yang diberikan secara automatik ke lokasi storan anda, anda boleh menggunakan kaedah
putFile
atauputFileAs
. Kaedah ini menerima contohIlluminateHttpFile
atauIlluminateHttpUploadedFile
dan secara automatik menstrim fail ke lokasi yang anda mahu:putFile
或putFileAs
方法。这个方法接收IlluminateHttpFile
或IlluminateHttpUploadedFile
实例,并自动将文件流式传输到你想要传输的位置:Storage::makeDirectory($directory);
关于
putFile
方法,有些点需要注意。我们指定的是一个目录名而不是文件名。默认情况下,putFile
方法会生成一个唯一的 ID 作为文件名。文件的扩展名根据检测文件的 MIME 类型来确定。putFile
方法会返回文件路径,以便你可以将文件路径(包括生成的文件名)存储在数据库中。putFile
和putFileAs
方法也接受一个方法来指定存储文件的 「可见性」。如果你将文件存储在诸如 S3 的云盘上,并且想让该文件公开访问,则可以使用以下功能:Storage::deleteDirectory($directory);
文件数据写入
prepend
和append
方法允许你在文件的开头或结尾写入数据:composer require spatie/flysystem-dropbox
复制 & 移动文件
copy
方法用来复制文件到磁盘上的新位置,而move
方法用来重命名或移动文件到新位置:<?php namespace App\Providers; use Storage;use League\Flysystem\Filesystem; use Illuminate\Support\ServiceProvider; use Spatie\Dropbox\Client as DropboxClient; use Spatie\FlysystemDropbox\DropboxAdapter; class DropboxServiceProvider extends ServiceProvider{ /** * 执行注册后引导驱动. * * @return void */ public function boot() { Storage::extend('dropbox', function ($app, $config) { $client = new DropboxClient( $config['authorization_token'] ); return new Filesystem(new DropboxAdapter($client)); }); } /** * 在容器中注册绑定. * * @return void */ public function register() { // } }
文件上传
在 web 应用程序中,最常用到的文件存储的场景的地方就是上传头像,照片和文件。Laravel 上传文件的实例方法
store
可以轻松的处理文件上传存储问题。你只需要调用带有文件保存路径作为参数的store
方法即可:'providers' => [ // ... App\Providers\DropboxServiceProvider::class, ];
上例有几个点需要注意。我们指定的是目录名,而不是文件名。默认情况下,
store
方法会自动生成唯一的 ID 作为文件名。文件的扩展名将通过检查文件的 MIME 类型来确定。该文件的路径和文件名会被store
方法返回,以便后续数据库的存储使用。你也可以使用
rrreeeStorage
facade 上的putFile
方法达到和上例同样的效果:指定文件名
如果你不想将文件名自动分配给存储的文件,可以使用
rrreeestoreAs
方法,该方法接受路径,文件名和 (可选) 磁盘作为其参数:你可以使用
Mengenai kaedahStorage
facade 上的putFileAs
rrreeeputFile
, ada beberapa perkara yang perlu diberi perhatian. Kami menentukan nama direktori dan bukannya nama fail. Secara lalai, kaedahputFile
menjana ID unik sebagai nama fail. Sambungan fail ditentukan berdasarkan jenis MIME fail yang dikesan. KaedahputFile
mengembalikan laluan fail supaya anda boleh menyimpan laluan fail (termasuk nama fail yang dijana) dalam pangkalan data. KaedahputFile
danputFileAs
juga menerima kaedah untuk menentukan "keterlihatan" fail yang disimpan. Jika anda menyimpan fail pada cakera awan seperti S3 dan mahu fail itu boleh diakses secara umum, anda boleh menggunakan fungsi berikut: 🎜rrreee🎜🎜Penulisan data fail Kaedah 🎜🎜prepend
danappend
membolehkan anda menulis data pada permulaan atau akhir fail: 🎜rrreee🎜 🎜Salin & Alihkan Fail🎜🎜Kaedahsalin digunakan untuk menyalin fail ke lokasi baharu pada cakera, manakala kaedah pindah digunakan untuk menamakan semula atau memindahkan fail ke lokasi baharu: 🎜rrreee 🎜🎜 🎜Muat naik fail
🎜Paling biasa digunakan dalam aplikasi web Pemandangan storan fail ialah tempat anda memuat naik avatar, foto dan fail. Kaedah contoh Laravelstor
untuk memuat naik fail boleh mengendalikan isu muat naik dan storan fail dengan mudah. Anda hanya perlu memanggil kaedahstore
dengan laluan simpan fail sebagai parameter: 🎜rrreee🎜Terdapat beberapa perkara yang perlu diperhatikan dalam contoh di atas. Kami menentukan nama direktori, bukan nama fail. Secara lalai, kaedahstore
menjana ID unik sebagai nama fail secara automatik. Sambungan fail akan ditentukan dengan menyemak jenis MIME fail. Laluan dan nama fail fail akan dikembalikan oleh kaedahstore
untuk storan pangkalan data berikutnya. 🎜🎜Anda juga boleh menggunakan kaedahputFile
pada fasadStorage
untuk mencapai kesan yang sama seperti contoh di atas: 🎜rrreee🎜🎜Nyatakan nama fail🎜🎜Jika anda tidak mahu nama fail diberikan secara automatik pada fail yang disimpan, anda boleh menggunakan kaedahstoreAs
, yang menerima laluan, nama fail dan ( secara pilihan) cakera sebagai parameternya: 🎜 rrreee🎜Anda boleh menggunakan kaedahputFileAs
pada fasadStorage
untuk mencapai operasi fail yang sama seperti contoh di atas: 🎜rrreee🎜🎜Nyatakan cakera
Secara lalai, kaedah
rrreeestore
menggunakan cakera lalai. Jika anda perlu menentukan cakera lain, anda boleh memasukkan nama cakera sebagai parameter kedua kaedahstore
:store
方法使用默认磁盘。如果你需要指定其他的磁盘,可以传入磁盘名作为store
方法的第二个参数:文件可见性
在 Laravel 集成的文件系统中,「可见性」是对多个平台的文件权限的抽象。文件可以声明为
public
或private
。如果一个文件被声明为public
,意味着其他人可以访问。例如,使用 S3 驱动时,就可以检索声明为public
的文件。你可以通过
rrreeeput
方法设置文件的可见性:
rrreeegetVisibility
和setVisibility
方法可以对现存文件的可见性进行查询和设置:删除文件
rrreeedelete
方法接收一个文件名或数组形式的文件名来删除磁盘上的文件:必要的话,可以指定磁盘名来删除其下的文件:
rrreee目录
获取目录下的所有的文件
rrreeefiles
方法返回指定目录下的所有文件。如果你想检索指定目录(包括子目录)中所有的文件列表,可以使用allFiles
方法:获取目录下的所有目录
rrreeedirectories
方法返回指定目录下所有目录的数组。此外,你可以使用allDirectories
方法获取指定目录以及其子目录下所有目录的列表:创建目录
rrreeemakeDirectory
方法会递归创建目录:删除目录
deleteDirectory
rrreeeKeterlihatan fail
Dalam sistem fail bersepadu Laravel, "keterlihatan" ialah abstraksi kebenaran fail pada berbilang platform. Fail boleh diisytiharkanawam atauperibadi . Jika fail diisytiharkanawam
, ini bermakna orang lain boleh mengaksesnya. Contohnya, apabila menggunakan pemacu S3, anda boleh mendapatkan semula fail yang diisytiharkan sebagaiawam
. Anda boleh menetapkan keterlihatan fail melalui kaedahput
: 🎜rrreee🎜KaedahgetVisibility
dansetVisibility
boleh menanyakan keterlihatan fail sedia ada dan tetapan: 🎜rrreee🎜🎜🎜- SFTP: