Nhảy tới nội dung
Phiên bản: 7.1.0

File Storage

File Storage là một thư viện lưu trữ file dựa trên Flysystem. Nó cung cấp một giao diện để tương tác với nhiều loại hệ thống tập tin.

Để sử dụng storage bạn có thể sử dụng các method static, ví dụ như method put để tạo file

Storage::put('file.png')

Mặc định các thao lưu, xóa, thêm file hay thư mục điều bên trong thư mục lưu trữ của cms uploads, nếu bạn cần thao tác với thư mục khác bạn có thể sử dụng phương thức disk

$storage = Storage::disk('app') // storage này sẽ thao tác với thư mục application
$storage = Storage::disk('language') // storage này sẽ thao tác với thư mục language
$storage = Storage::disk('router') // storage này sẽ thao tác với thư mục router
$storage = Storage::disk('upload') // storage này sẽ thao tác với các data nằm trong thư mục uploads
$storage = Storage::disk('views') // storage này sẽ thao tác với các data nằm trong thư mục views
$storage = Storage::disk('plugin') // storage này sẽ thao tác với các data nằm trong thư mục views/plugins
$storage = Storage::disk('admin') // storage này sẽ thao tác với các data nằm trong thư mục views/backend
$storage = Storage::disk('cache') // storage này sẽ thao tác với các data nằm trong thư mục views/cache

hoặc bạn có thể sử dụng method make, method nhận vào một đối số là thư mục cần thao tác, mặc định giá trị này sẽ được đặt thành thư mục lưu trữ của cms uploads

$storage = Storage::make(string $path)

Files

Lấy Files

Phương thức get có thể được sử dụng để lấy nội dung của một file. Nội dung chuỗi thô của file sẽ được trả về bởi phương thức. Hãy nhớ rằng, tất cả các đường dẫn file nên được chỉ định tương đối đối với "root" của ổ đĩa:

$contents = Storage::get('source/file.jpg');
//hoặc
$contents = Storage::disk('upload')->get('source/file.jpg');

Nếu file bạn đang lấy có nội dung là JSON, bạn có thể sử dụng phương thức json để lấy file và giải mã nội dung của nó:

$contents = Storage::json('source/file.json');
//hoặc
$contents = Storage::disk('upload')->json('source/file.json');

Phương thức exists có thể được sử dụng để xác định xem một file có tồn tại không:

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

Phương thức missing có thể được sử dụng để xác định xem một file đã mất hay chưa:

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

Thông tin Files

Ngoài việc đọc và ghi files, Storage còn có thể cung cấp thông tin về chính files đó.

Phương thức size có thể được sử dụng để lấy kích thước của một file tính bằng byte:

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

Phương thức lastModified trả về thời điểm sửa đổi cuối cùng của file dưới dạng dấu thời gian UNIX:

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

MIME type của một file cụ thể có thể được lấy qua phương thức mimeType:

$mime = Storage::mimeType('file.jpg');

Lưu Files

Phương thức put có thể được sử dụng để lưu trữ nội dung của file lên ổ đĩa. Bạn cũng có thể truyền một PHP resource cho phương thức put, sẽ sử dụng hỗ trợ dòng của Flysystem ở dưới. Hãy nhớ rằng, tất cả các đường dẫn file nên được chỉ định tương đối đối với "root" được cấu hình cho ổ đĩa:

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

Lữu File Thất Bại

Nếu phương thức put (hoặc các hoạt động "ghi" khác) không thể ghi file vào ổ đĩa, false sẽ được trả về:

if (!Storage::put('file.jpg', $contents)) {
// File không thể được ghi vào ổ đĩa...
}

Thêm nội dung vào Đầu hoặc Cuối Files

Phương thức prependappend cho phép bạn ghi vào đầu hoặc cuối của một file:

Storage::prepend('file.log', 'Text được thêm vào đầu');
Storage::append('file.log', 'Text được thêm vào cuối');

Copying và Moving Files

Phương thức copy có thể được sử dụng để sao chép một file tồn tại vào một vị trí mới trên ổ đĩa, trong khi phương thức move có thể được sử dụng để đổi tên hoặc di chuyển một file tồn tại vào vị trí mới:

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

Upload Files

Trong ứng dụng web, một trong những trường hợp sử dụng phổ biến nhất để lưu trữ files là lưu trữ các files được người dùng tải lên như ảnh và tài liệu. Storage giúp việc lưu trữ các files được tải lên trở nên rất dễ dàng bằng cách sử dụng phương thức store trên một instance của file đã được tải lên. Gọi phương thức store với đường dẫn mà bạn muốn lưu trữ file đã tải lên:

$path = request()->file('avatar')->store('avatars');

Có một số điều quan trọng cần lưu ý về ví dụ này. Lưu ý rằng store chỉ nhận tên thư mục, không phải tên file. Mặc định, phương thức store sẽ tạo ra một ID duy nhất để làm tên file. Phần mở rộng của file sẽ được xác định bằng cách kiểm tra kiểu MIME của file. Đường dẫn đến file sẽ được trả về bởi phương thức store để bạn có thể lưu trữ đường dẫn, bao gồm tên file được tạo ra, trong cơ sở dữ liệu của bạn.

Tạo Tên Files

Nếu bạn không muốn tự động gán một tên file cho file đã lưu trữ của bạn, bạn có thể sử dụng phương thức storeAs, nhận đường dẫn, tên file và (tùy chọn) ổ đĩa như là các đối số của nó:

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

Các ký tự Unicode không thể in và không hợp lệ sẽ tự động bị loại bỏ khỏi đường dẫn của file. Do đó, bạn nên làm sạch đường dẫn của file trước khi truyền chúng vào Storage file của SkillDo. Đường dẫn file được chuẩn hóa bằng cách sử dụng phương thức League\Flysystem\WhitespacePathNormalizer::normalizePath

Thông tin Files Upload

Nếu bạn muốn lấy tên và phần mở rộng ban đầu của file đã tải lên, bạn có thể sử dụng các phương thức getClientOriginalNamegetClientOriginalExtension:

$file = $request->file('avatar');
$name = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();

Tuy nhiên, hãy nhớ rằng các phương thức getClientOriginalNamegetClientOriginalExtension là không an toàn, vì tên file và phần mở rộng có thể bị can thiệp bởi người dùng. Vì lý do này, bạn thường nên sử dụng các phương thức hashNameextension để lấy tên và phần mở rộng cho file tải lên cụ thể:

$file = $request->file('avatar');
$name = $file->hashName(); // Tạo ra một tên duy nhất, ngẫu nhiên...
$extension = $file->extension(); // Xác định phần mở rộng của file dựa trên kiểu MIME của file...

Xóa File

Phương thức delete chấp nhận một file hoặc một mảng các files để xóa:

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

Directories

Lấy Tất cả Files Trong Một Dir

Phương thức files trả về một mảng của tất cả các files trong một thư mục cụ thể. Nếu bạn muốn lấy danh sách tất cả các files trong một thư mục cụ thể bao gồm tất cả các thư mục con, bạn có thể sử dụng phương thức allFiles:

$files = Storage::files($directory);
$files = Storage::allFiles($directory);

Lấy Tất cả Dir Trong Một Dir

Phương thức directories trả về một mảng của tất cả các thư mục trong một thư mục cụ thể. Ngoài ra, bạn có thể sử dụng phương thức allDirectories để lấy danh sách tất cả các thư mục trong một thư mục cụ thể và tất cả các thư mục con của nó:

$directories = Storage::directories($directory);
$directories = Storage::allDirectories($directory);

Tạo Một Dir

Phương thức makeDirectory sẽ tạo ra thư mục đã cho, bao gồm bất kỳ thư mục con cần thiết:

Storage::makeDirectory($directory);

Xóa Một Dir

Cuối cùng, phương thức deleteDirectory có thể được sử dụng để xóa bỏ một thư mục và tất cả các files của nó:

Storage::deleteDirectory($directory);