라 라벨에서 파일 업로드 처리-CodeSource.io
거의 모든 응용 프로그램은 일종의 파일 업로드와 관련이 있습니다.
따라서 라 라벨에서 파일 업로드를 처리하는 방법을 이해하는 것이 중요합니다.
이 튜토리얼에서,우리는 사용자가 자신의 세부 사항을 작성해야하고 이러한 세부 사항은 프로필 사진을 제출 포함됩니다 간단한 사용자 프로필 양식을 구축 할 것입니다.
이 자습서가 끝나면 파일 업로드를 처리하고 파일 업로드 유효성 검사를 처리하며 파일이 성공적으로 업로드되지 않을 때 수행 할 작업을 알 수 있어야합니다.
설정
시작하려면 시스템에 라라벨을 설치해야 합니다. 라 라벨이 이미 설치되어있는 경우,이 단계를 건너 뛸 수 있습니다.
전 세계적으로 라 라벨을 설치하는 것이 좋습니다. 특히 당신이 그것을 자주 사용할 계획이라면. 터미널에서 다음 명령을 실행하여 수행할 수 있습니다.
composer global require laravel/installer
이 작업이 완료되면 이 자습서를 위한 새 라 라벨 프로젝트를 만들 수 있습니다.
laravel new profile-form
위의 명령을 실행하면 프로필 양식이라는 현재 디렉토리에 새 라 라벨 프로젝트가 생성됩니다.
다음을 실행하여 앱 제공:
cd profile-formphp artisan serve
로 이동하여 앱에 기본 라 라벨 방문 페이지가 표시됩니다.
데이터베이스 마이그레이션 작성
사용자 세부 정보를 저장할 사용자 테이블을 만들어야 합니다.라라벨은database\migrations14_10_12_000000_create_users_table.php
에서 찾을 수 있는 사용자 테이블에 대한 마이그레이션과 함께 제공됩니다. 이 파일을 다음과 같이 수정:
여기,우리는 사용자 사진에 저장할 필드 사진을 포함하도록 사용자 테이블에 대한 기본 라 라벨 마이그레이션을 수정했습니다.
수정.올바른 데이터베이스 세부 정보를 포함하는 환경 파일. 그런 다음 다음 명령을 실행하여 마이그레이션을 실행합니다:
php artisan migrate
사진 필드의 추가를 반영하도록 사용자 모델을 업데이트합니다. 7647>에 사진을 추가하여 사용자를 만들고 업데이트 할 때 라 라벨로 자동 채울 수 있습니다.
// App\User.phpprotected $fillable = ;
이 작업이 완료되면 프로파일 양식의 프론트 엔드를 작성할 수 있습니다.
프론트 엔드 구축
우리는 사용자가 등록하고 응용 프로그램에 로그인 할 수 있도록 인증 시스템을 만들어야합니다.
register.blade.php
이라는 리소스/뷰에 새 파일을 만듭니다. 새로 만든 파일에 다음을 추가합니다.
우리는 따라서 페이지의 상단 섹션에 추가 할 필요가 스타일에 부트 스트랩을 사용하고 있습니다. 사용자가 모든 필드를 채우지 않고 양식을 제출할 수 없도록 여기에 필요한 모든 필드를 만들었습니다.
여기서 우리에게 특히 중요한 필드는 파일 입력 필드<input type="file"
업데이트 웹입니다.
// web.php...Route::get('/register', function () { return view('register');});
로 이동하면 등록 양식의 일반적인 필드가 포함된 등록 페이지가 표시됩니다.
지원되는 파일 유형을 지정해야합니다. 우리는 이미지 파일을 원하기 때문에,우리는 우리가 단지 이미지 파일을 원하는 입력 요소에 지정해야합니다.
입력 태그에 값이image/*
인 수락 특성을 추가하여input:type="file"
을 사용하여 이미지 파일만 수락합니다.
사진 섹션은 이제 다음과 같아야합니다:
양식이 백엔드에 이미지를 보내도록 설정된 것처럼 보이지만 아직 그렇게 할 수는 없습니다. 우리는 백엔드에 양식 데이터의 또 다른 유형을 보낼 필요가 양식을 말할 필요가,이 경우 이진 데이터.
양식 요소에enctype
속성을 추가하고 값을multipart/form-data
으로 설정합니다.
여는 양식 태그는 다음과 같습니다:
<form action="#" class="col-md-5" enctype="multipart/form-data">
다음으로 업로드를 처리 할 컨트롤러를 작성해야합니다.
컨트롤러 작성
백엔드는 유효성 검사,사용자 저장 및 리디렉션/인증을 처리 할 수 있어야합니다.
라라벨은app\Http\Controllers\Auth\RegisterController.php
에서 찾을 수 있는 레지스터 컨트롤러와 함께 배송된다.
유효성 검사
레지스터 컨트롤러의validator
메서드는 필드 유효성 검사를 담당합니다. 그래서 우리가 실제로 원하는 것을 반영하기 위해 그것을 업데이트 할 수 있습니다.
레지스터 컨트롤러에서 유효성 검사기 메서드를 수정합니다.모든 필드를 검증 할 수 있습니다.
이름 필드는 필수 필드이고 문자열이어야 하며,따라서 유효성 검사 규칙이어야 합니다. 이메일과 비밀번호도 마찬가지입니다.
암호 필드를 확인해야 합니다. 프론트엔드에서 암호 _확인에 대한 필드를 추가했습니다. 이 암호 필드가 비교되는 것입니다. 마지막으로 사진 필드.
이 필드는 등록시 필요합니다. 우리의 데이터베이스 마이그레이션에,우리는 그렇게했기 때문에 필요합니다. 널 가능하도록 설정했다면 유효성 검사를 필수로 설정할 필요가 없습니다.
라 라벨은 또한 이미지 파일의 유효성을 검사하는 데 사용되는 편리한 유효성 검사 규칙 인 이미지를 가지고 있습니다.
파일에 대해 수행할 수 있는 다른 유효성 검사는
- 파일 크기가 특정 크기보다 크거나 작지 않은지 확인하는 것입니다. 이 규칙은 필요에 따라
max:500
또는min:500
로 추가할 수 있습니다. 여기서 파일 크기는 이미지의 크기를 확인하는 킬로바이트 - 입니다. 이 작업은 규칙 배열
'dimensions:min_width=100,min_height=200'
에 다음을 추가하여 수행 할 수 있습니다.
저장
다음 단계는 이미지를 저장하는 것이다. 이 기능을 처리 할 수있는 새로운 기능을 만들 것입니다.
응용 프로그램에 파일을 저장할 수 있는 곳이 몇 군데 있습니다.
라 라벨은 이러한 위치에 파일을 저장하기위한 지원이 함께 제공됩니다. 단순화를 위해,우리는 응용 프로그램에서 이미지 파일을 저장하는 것입니다.
라 라벨 요청 클래스,Illuminate\Http\Request
상자 밖으로 파일 처리에 대한 지원을 제공합니다. 업로드된 파일은$request→file(<inputName>)→store(<folderToBeStored>)
을 통해 저장할 수 있습니다. 우리의 경우 다음을 사용할 수 있습니다:
$request->file('photo')->store('profile')
파일을 저장소\app\profile
폴더에 저장합니다. 이 파일은 임의의 이름으로 저장되며,이 파일의 주소가 반환됩니다.
저장 중인 이미지에 사용자 지정 이름을 지정하려면storeAs
방법을 사용해야 합니다.
storeAs
메서드를 사용하면 파일 확장자가 중요하므로
$request→file(<inputName>)→storeAs(<folderToBeStored>, <customName.fileExtension>)
메서드를 통해 업로드한 파일의 파일 확장자를 가져올 수 있는 간단한 방법을 제공합니다.
아래 그림과 같이 얻을 수 있습니다
$request->file('photo')->extension()
이 방법을 사용하면 사용자 이름을 기반으로 사용자 이미지를 저장할 수 있습니다.
$fileName = $request->get('name') . '.' . $request->file('photo')->extension(); $request->file('photo')->storeAs('profile', $fileName);
우리의 경우,우리는 라 라벨이 우리의 파일을 저장하는 임의의 이름으로 할 수 있습니다.
- 파일을 공개적으로 액세스하려면
storage/app/public
폴더에 저장해야 합니다.
- 다른 폴더의 파일은 공개적으로 사용할 수 없습니다
의 저장소에 이미지를 저장하는 작업을 처리하는 함수를 만들 수 있습니다.
유효성 검사기 함수 아래에 다음
추가storeImage
함수는storage/app/public/profile
폴더에 이미지를 저장하고 파일의 저장 위치로 돌아갑니다.
모두 합치면
우리가 할 일을 더 추가하고 있기 때문에,우리는 라 라벨에 의해 우리에게 제공된 기본 레지스터 방법을 재정의해야합니다.
라라벨은 사용자 등록을 위한 특성을 제공하며
Illuminate\Foundation\Auth\RegistersUsers.php
에서 찾을 수 있다.
다음을 포함하도록 레지스터 컨트롤러를 업데이트합니다:
위에서 볼 수 있듯이 생성 기능은 사용자에게 전송되는 데이터를 기반으로 사용자를 생성하는 작업을 수행합니다.
레지스터 기능은 모든 일이 일어나는 곳입니다. 검증은 먼저 다른 어떤 것보다 먼저 수행됩니다.
유효성 검사가 통과되면 이미지를 저장합니다. 이 작업이 완료되면 배열에 필요한 모든 데이터$data
을 전달하여 사용자를 만듭니다.
모든 것이 성공적으로 발생하면 사용자를 인증하고 홈 페이지로 리디렉션합니다.
업로드 된 이미지 표시
홈 페이지는 모든 사용자 세부 정보를 표시합니다. 먼저 경로 및 컨트롤러를 만들어 보겠습니다.
터미널에서 홈 컨트롤러를 생성하는 코드를 실행합니다.
php artisan make:controller HomeController
새로 만든HomeController
로 이동하여 클래스에 다음 메서드를 추가합니다.
생성자에서 인증 미들웨어를 사용하고 있다고 정의합니다. 이 미들웨어는 권한이있는 사용자 만 클래스에 정의 된 함수에 액세스 할 수 있다는 것입니다.
따라서 사용자는 인증 된 경우에만 여기에 올 수 있습니다. 인증되지 않은 사용자는 로그인 페이지로 리디렉션됩니다.
표시 기능은 홈 페이지의 표시를 처리합니다. 인증된 사용자도 뷰에 전달합니다. 이에 대한 자세한 내용은 라 라벨 문서를 확인하십시오.
홈 경로를 포함하도록 경로 파일을 업데이트합니다.
// web.php...Route::get('/home', '[email protected]')->name('home');
마지막으로 홈을 만듭니다.블레이드.resources/views
디렉토리에 있는 파일.
홈에 다음을 추가합니다.블레이드.뷰 파일에서 컨트롤러에서 전달된user
데이터에 액세스할 수 있습니다.
현재 사진을 사용할 수 없기 때문에 사용자의 사진을 보여주기 위해 자리 표시 자 이미지를 사용하고 있습니다.
public/storage
에서storage/app/public
까지의 심볼릭 링크를 만들어야 합니다.:
php artisan storage:link
이 작업을 수행 한 후 이미지 태그를 업데이트하여 프로필 이미지를 표시합니다.
<img src="https://codesource.io/handling-file-uploads-in-laravel/amp/{{asset('storage/'.$user->photo)}}" class="card-img-top" alt="...">
축하!!! 당신은 성공적으로 라 라벨에 이미지를 저장하는 방법을 배웠습니다.
결론
거의 모든 응용 프로그램에서 파일을 한 가지 방법으로 저장해야합니다. 위의 가이드에 따라 이미지 및 기타 파일을 로컬 저장소에 저장할 수 있어야합니다.여기에 사용 된 모든 코드는 여기에서 찾을 수 있습니다.
Leave a Reply