【Laravel】 CSV 파일 업로드의 검증이 통과되지 않은 원인
밸리데이션이 통과하지 않는다. .
가볍게 빠져서 해결까지의 흐름을 적어 둡니다.
환경
이번에는별로 환경이라든지 버전은 상관 없지만
최초로 실장한 내용(밸리데이션이 통과하지 않는다)
화면측
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',
];
}
〜〜省略〜〜
참고 기사
<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>
<?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ファイル',
];
}
}
원인 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',
];
}
〜〜省略〜〜
참고 기사
Reference
이 문제에 관하여(【Laravel】 CSV 파일 업로드의 검증이 통과되지 않은 원인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/youstr/items/d98312d2dfe58c181349텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)