Articles

라 라벨에서 파일 업로드 처리-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="...">

축하!!! 당신은 성공적으로 라 라벨에 이미지를 저장하는 방법을 배웠습니다.

결론

거의 모든 응용 프로그램에서 파일을 한 가지 방법으로 저장해야합니다. 위의 가이드에 따라 이미지 및 기타 파일을 로컬 저장소에 저장할 수 있어야합니다.여기에 사용 된 모든 코드는 여기에서 찾을 수 있습니다.