Загрузка файлов
В Laravel очень просто сохранять загружаемые файлы методом store()
на экземпляре загружаемого файла:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserAvatarController extends Controller {
public function update(Request $request) {
$path = $request->file('avatar')->store('avatars');
return $path;
}
}
Мы указываем только директорию avatars
, а имя файла будет сформировано автоматически. Метод вернёт путь к файлу, поэтому можно сохранить в БД весь путь, включая сгенерированное имя. Файл будет сохранен на диск по умолчанию, но можно указать диск вторым аргументом метода store()
.
$path = $request->file('avatar')->store('avatars', 'public');
Также можно использовать метод putFile()
фасада Storage
для выполнения аналогичного действия:
// будет использован диск по умолчанию
$path = Storage::putFile('avatars', $request->file('avatar'));
// явное указание диска для сохранения
$path = Storage::disk('public')->putFile('avatars', $request->file('avatar'));
Чтобы задать свое имя файла и (опционально) диск для сохранения, можно использовать метод storeAs()
:
// будет использован диск по умолчанию
$path = $request->file('avatar')->storeAs(
'avatars', // директория, куда сохранять
$request->user()->id // имя файла
);
// явное указание диска для сохранения
$path = $request->file('avatar')->storeAs(
'avatars', // директория, куда сохранять
$request->user()->id, // имя файла
'public' // диск, куда сохранять
);
Также можно использовать метод putFileAs()
фасада Storage
для выполнения аналогичного действия:
// будет использован диск по умолчанию
$path = Storage::putFileAs(
'avatars', // директория, куда сохранять
$request->file('avatar'),
$request->user()->id // имя файла
);
// явное указание диска для сохранения
$path = Storage::disk('public')->putFileAs(
'avatars', // директория, куда сохранять
$request->file('avatar'),
$request->user()->id // имя файла
);
Чтобы получить оригинальное имя загруженного файла:
$name = $request->file('avatar')->getClientOriginalName();
Чтобы получить оригинальное расширение загруженного файла:
$extension = $request->file('avatar')->extension();