【Laravel】 CSV 파일 업로드의 검증이 통과되지 않은 원인

화면에서 CSV아일의 업로드를 하는 기능을 만들게 되어, 아무것도 없는 채로 구현했으므로, 조금 실행해 볼까와 동작 확인한 바,

밸리데이션이 통과하지 않는다. .

가볍게 빠져서 해결까지의 흐름을 적어 둡니다.

환경



이번에는별로 환경이라든지 버전은 상관 없지만
  • Laravel5.4

  • 최초로 실장한 내용(밸리데이션이 통과하지 않는다)



    화면측



    input.blade.php
    <form action="/upload/csv" method="post" >
        {{ csrf_field() }}
    
        <div class="form-group">
            {{ Form::label('csv_file', 'CSVファイル', ['class' => 'col-sm label-required']) }}
            <div class="col-sm">
                <label class="custom-file">
                    <input type="file" accept=".csv" class="custom-file-input" name="csv_file" id="csv_file">
                    <label class="custom-file-label custom-file-control" for="csv_file" data-browse="参照">ファイル選択...</label>
                </label>
                @component('form_error', ['errors' => $errors, 'field' => 'csv_file'])@endcomponent
            </div>
        </div>
    
        <div class="col-sm">
            <button type="form" class="btn btn-info">送信</button>
        </div>
    </form>
    

    양식 요청



    CsvUploadRequest.php
    <?php
    
    namespace App\Http\Requests;
    
    use Illuminate\Foundation\Http\FormRequest;
    
    class CsvUploadRequest extends FormRequest
    {
        public function authorize()
        {
            return true;
        }
    
        public function rules()
        {
            return [
                'csv_file' => 'required|file|mimes:csv',
            ];
        }
    
        public function messages()
        {
            return [
                'csv_file.file' => 'CSVファイルを選択してください'
            ];
        }
    
        public function attributes()
        {
            return [
                'csv_file' => 'CSVファイル',
            ];
        }
    }
    

    움직여 보자



    CSV 파일을 선택하고 보내기 버튼을 잡아.



    왜--. .

    원인 및 수정



    원인 1



    첫 번째 메시지를 보면, file 규칙에 걸려? 원래 업로드 할 수 없습니까?

    HTML이라든지 잘 모르겠지만, 기억의 한 구석에서 「파일을 업로드할 때는 <form> 태그의 속성으로 뭔가 설정하지 않으면 안 된 것 같은 생각이」라고 생각한다.

    ・・・・・・.
    enctype="multipart/form-data" 이었나?

    그래서 수정했습니다.

    수정 내용



    수정 부분만 발췌

    input.blade.php
    <form action="/upload/csv" method="post" enctype="multipart/form-data">
    
    〜〜省略〜〜
    
    </form>
    

    원인 그 2



    두 번째 오류 메시지를 보면 확장자 (.csv)가 인식되지 않습니다?
    이 구조는 깊이 쫓고 있지 않습니다만, 아무래도 mimes 룰의 인수에는 txt 도 건네주지 않으면 안 되는 것 같습니다.
    그러면 ".txt"파일도 허가하게 될 것 같지만, 이번에는 타협했습니다.

    수정 내용



    수정 부분만 발췌

    CsvUploadRequest.php
    〜〜省略〜〜
    
        public function rules()
        {
            return [
                'csv_file' => 'required|file|mimes:csv,txt',
            ];
        }
    
    〜〜省略〜〜
    

    참고 기사


  • Laravel에서 CSV 파일의 내용 유효성 검사
  • 좋은 웹페이지 즐겨찾기