laravel的文件存儲

內容寫入磁盤文件

> php artisan tinker
>>> use Illuminate\Support\Facades\Storage;
>>> Storage::put('test.txt', 'hello');
=> true

文件默認創建在 /storage/app 目錄下
一般情況下最常用的是local(本地)存儲,所以特別說下,我們可以通過修改’root’來修改我們的root路徑:

    'local' => [
        'driver' => 'local',
//           'root'   => storage_path('app'),  在/storage/app/目錄
            'root'   => public_path('uploads'), // 在public/uploads/ 目錄
        ], 

在這裏插入圖片描述
put函數的第二個參數是要寫入指定文件(第一個參數)
刪除文件

>>> Storage::delete('test.txt')
=> true
文件默認存儲路徑是在哪裏設置的
Config/filesystems.php
    'disks' => [

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

Local.root 指定的即是默認路徑。
判斷一個文件是否存在

>>> Storage::put('public/test.txt', 'hello');
=> true
>>> Storage::exists('public/test.txt');
=> true
>>> Storage::exists('public/test1.txt');
=> false

檢索一個文件(即得到一個文件的內容)
在這裏插入圖片描述
在這裏插入圖片描述

下載相對文件:
在這裏插入圖片描述
在本地建設的環境如下:
鏈接:
在這裏插入圖片描述
控制器內容:
在這裏插入圖片描述
瀏覽器反應:
在這裏插入圖片描述

Laravel還提供對文件本身屬性的操作:
在這裏插入圖片描述
可以使用date函數轉換時間格式:
date(‘Y-m-d H:i:s’, 1156219870);
第一個參數爲要轉換成的時間格式,第二個參數表示時間戳。
在這裏插入圖片描述
在這裏插入圖片描述

文件上傳
在 web 應用程序中,最常用到的文件存儲的場景的地方就是上傳頭像,照片和文件。Laravel 上傳文件的實例方法 store 可以輕鬆的處理文件上傳存儲問題。你只需要調用帶有文件保存路徑作爲參數的 store 方法即可:

<?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;
    }
}

上例有幾個點需要注意。我們指定的是目錄名,而不是文件名。默認情況下, store 方法會自動生成唯一的 ID 作爲文件名。文件的擴展名將通過檢查文件的 MIME 類型來確定。該文件的路徑和文件名會被 store 方法返回,以便後續數據庫的存儲使用。
你也可以使用 Storage facade 上的 putFile 方法達到和上例同樣的效果:
$path = Storage::putFile(‘avatars’, $request->file(‘avatar’));
指定文件名
如果你不想將文件名自動分配給存儲的文件,可以使用 storeAs 方法,該方法接受路徑,文件名和 (可選) 磁盤作爲其參數:

$path = $request->file('avatar')->storeAs(
    'avatars', $request->user()->id
);

你可以使用 Storage facade 上的 putFileAs 方法達到和上例同樣的文件操作:

$path = Storage::putFileAs(
    'avatars', $request->file('avatar'), $request->user()->id
);

指定磁盤
默認情況下, store 方法使用默認磁盤。如果你需要指定其他的磁盤,可以傳入磁盤名作爲 store 方法的第二個參數:

$path = $request->file('avatar')->store(
    'avatars/'.$request->user()->id, 's3'
);

文件可見性
在 Laravel 集成的文件系統中,「可見性」是對多個平臺的文件權限的抽象。文件可以聲明爲 public 或 private。如果一個文件被聲明爲 public,意味着其他人可以訪問。例如,使用 S3 驅動時,就可以檢索聲明爲 public 的文件。
你可以通過 put 方法設置文件的可見性:

use Illuminate\Support\Facades\Storage;

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

getVisibility 和 setVisibility 方法可以對現存文件的可見性進行查詢和設置:

$visibility = Storage::getVisibility('file.jpg');

Storage::setVisibility('file.jpg', 'public')

刪除文件
delete 方法接收一個文件名或數組形式的文件名來刪除磁盤上的文件:

use Illuminate\Support\Facades\Storage;

Storage::delete('file.jpg');

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

必要的話,可以指定磁盤名來刪除其下的文件:

use Illuminate\Support\Facades\Storage;

Storage::disk('s3')->delete('folder_path/file_name.jpg');
發佈了41 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章