內容寫入磁盤文件
> 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');