1. 程式人生 > >基於 Laravel 的 文件管理

基於 Laravel 的 文件管理

info isf laravel 雲存儲 完成 function 根目錄 pat ont

  以 laravel 5.5 為例,框架集成了文件系統和雲存儲功能

  可以實現文件夾列表、創建、重命名、刪除,文件列表、上傳、重命名、刪除等操作

一、先進行配置

  在 config 文件夾下有 filesystems.php,本地一般將文件存儲在 storage 目錄下。

  技術分享圖片

  1、public 磁盤是可以公開訪問的,driver(驅動)為 local,root(存儲目錄)為 storage/app/public,url(訪問路由)為 項目路由/storage。

  註意:項目域名是綁定在 public 目錄下的,為了能訪問到 storage 下面的文件,需要在 public 下面創建超鏈接,

    命令為 php artisan storage:link ,執行完後會在 public 目錄下看到超鏈接 storage。

  2、在 .env 文件中添加 文件系統配置,

    技術分享圖片

二、配制完成後,就可以對文件進行操作

  Storage facade 用於和所有已配置的磁盤進行交互,

  或者引入 Filesystem 如下圖

  技術分享圖片

  註意選擇兩種方式時的文件路徑

  1、獲取所有目錄,$directory 為相對於配置文件中 root 的路徑

    $directories = Storage::directories($directory);  獲取 $directory

目錄下的所有文件夾

    $directories = Storage::allDirectories($directory);  獲取 $directory 目錄及其子目錄下的所有文件夾

  2、創建目錄

    Storage::makeDirectory($directory);  在 $directory 目錄下創建文件夾

  3、刪除目錄

    Storage::deleteDirectory($directory);  刪除 $directory 文件夾及文件夾下面的所有文件

  4、重命名目錄

    $filesystem->moveDirectory($path_old, $path);

  將文件夾 $path_old 重命名為 $path

    註意:這兩個參數都是相對於 項目根目錄的路徑

  5、文件上傳

    $path = Storage::putFileAs($dir, $request->file(‘file‘), $file_name);  將文件 $request->file(‘file‘) 命名為 $file_name 上傳到 $dir 目錄

    三個參數分別為:上傳位置、表單提交的文件、自定義文件名

  6、刪除文件、

    $filesystem->delete($path);  刪除 $path 路徑的文件

  7、重命名文件名

    $filesystem->move($path_old, $path);  將文件 $path_old 重命名為 $path

  8、獲取所有文件

    $files = Storage::files($directory);  獲取文件夾 $directory 下面的所有文件

    $files = Storage::allFiles($directory);  獲取文件夾 $directory 下面及其子文件夾下面的所有文件

  9、進行刪除或重命名操作時,判斷操作對象是文件還是文件夾

    $filesystem->isFile($path);  判斷是否是文件

    $filesystem->isDirectory($file);  判斷文件是否是文件夾

  10、展示文件時需要一些文件的信息

    Storage::size($file);  文件大小

    Storage::lastModified($file);  文件最後修改時間

    $filesystem->extension($file);  文件擴展名

    $filesystem->type($directory);  文件類型

三、中文亂碼問題

  文件系統的編碼為 gbk 而代碼系統中編碼為 utf-8 ,因此兩者之間需要轉碼,借助 iconv

  iconv(‘gbk‘, ‘utf-8‘, $dir);  將 $dir 從 gbk 轉為 utf-8

  iconv(‘utf-8‘, ‘gbk‘, $dir);  utf-8 轉為 gbk

四、文件大小的單位默認為 bit,文件稍大時需要可讀性更好的單位

/**
 * 返回可讀性更好的文件尺寸
 */
function human_filesize($bytes, $decimals = 2)
{
    $size = [‘B‘, ‘kB‘, ‘MB‘, ‘GB‘, ‘TB‘, ‘PB‘];
    $factor = floor((strlen($bytes) - 1) / 3);

    return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) .@$size[$factor];
}

五、文件系統大體完成,還可以添加一些更方便的操作

  文件索引、文件在線預覽、文件下載等

基於 Laravel 的 文件管理