人々にファイルのアップロードを許可する入力フィールドがあります。私は彼らがdocのようなWordファイルとcsv、xlsxのようなファイルをアップロードできることを望んでいます。
.docで試してもまったく問題ありませんが、Excelファイルで試してみると、バリデーターは失敗し、適切な拡張子ではないと言います。
ここで私のコードを見ることができます。2行のコメントは私が試したもう1つの解決策でしたが、うまくいきません:(。
どんな助けでも大歓迎です。
public function postFile(Request $request)
{ //Règle de validation avec les type de fichiers acceptés
if(isset($request->file)){
//dd($request);
$validator=Validator::make($request->all(),[
'file'=>'required|max:50000|mimes:xlsx,doc,docx,ppt,pptx,ods,odt,odp,application/csv,application/Excel,
application/vnd.ms-Excel, application/vnd.msexcel,
text/csv, text/anytext, text/plain, text/x-c,
text/comma-separated-values,
inode/x-empty,
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
/* 'extension' => strtolower($request->file->getClientOriginalExtension()),
'extension'=>'required|in:doc,csv,xlsx,xls,docx,ppt,odt,ods,odp'*/
]);
if ($validator->fails()) {
return back()
->withErrors($validator);
}
はい、私のせいです。私はこのウェブサイトで見つけた別の解決策を試しましたが、うまくいきました。オーディンを助けてくれてありがとう。このウェブサイトでの最初の質問でした。私は誰かを今助けることができるかどうかを見るつもりです。私は困っている人のための解決策のコードを投稿します:)。
$validator = Validator::make(
[
'file' => $request->file,
'extension' => strtolower($request->file->getClientOriginalExtension()),
],
[
'file' => 'required',
'extension' => 'required|in:doc,csv,xlsx,xls,docx,ppt,odt,ods,odp',
]
);
拡張機能を記述したい場合は、「mimes」を使用します(xlsx、doc、docx)。 application/vnd.ms-Excelのようなmime-typeを使用する場合、検証ルール mimetype を使用する必要があります
その他のMIMEタイプ: その他のMIMEタイプ
$validator=Validator::make($request->all(),[
//use this
'file'=>'required|max:50000|mimes:xlsx,doc,docx,ppt,pptx,ods,odt,odp'
//or this
'file'=>'required|max:50000|mimetypes:application/csv,application/Excel,
application/vnd.ms-Excel, application/vnd.msexcel,
text/csv, text/anytext, text/plain, text/x-c,
text/comma-separated-values,
inode/x-empty,
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
]
Laravel 6でファイル拡張子を確認することで、これをどのように実行したかを示します。
新しい検証ルールを作成します。
php artisan make:rule ExcelRule
ファイルの拡張子をチェックするExcelRule
は次のとおりです。
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Http\UploadedFile;
class ExcelRule implements Rule
{
private $file;
public function __construct(UploadedFile $file)
{
$this->file = $file;
}
public function passes($attribute, $value)
{
$extension = strtolower($this->file->getClientOriginalExtension());
return in_array($extension, ['csv', 'xls', 'xlsx']);
}
public function message()
{
return 'The Excel file must be a file of type: csv, xls, xlsx.';
}
}
ご覧のとおり、ここでcsv
、xls
、またはxlsx
を確認しています。必要に応じて追加の拡張機能を追加できます。
コントローラでそれを使用する:
public function uploadExcelFile(Request $request)
{
$request->validate([
'Excel_file' => ['required', new ExcelRule($request->file('Excel_file'))],
]);
$model->update([
'Excel_file' => $request->file('Excel_file')->store('Excel_files'),
]);
return redirect()->route('my_route_name')->with('Excel file uploaded!');
}
Laravelでは、After Hooksを使用して拡張子付きのファイルアップロードを検証できます。続きを読む here !
$validator->after(function ($validator) use ($request){
if($this->checkExcelFile($request->file('file')->getClientOriginalExtension()) == false) {
//return validator with error by file input name
$validator->errors()->add('file', 'The file must be a file of type: csv, xlsx, xls');
}
});
function checkExcelFile($file_ext){
$valid=array(
'csv','xls','xlsx' // add your extensions here.
);
return in_array($file_ext,$valid) ? true : false;
}
最初これは適切な解決策ではないことを伝えます。しかし、これを試すことができます。
私もそれを検索しましたが、検証に非常に苦労しましたExcel file
とそのMIMEタイプは残念ながら機能しません。
if($request->hasFile('file'))
{
$extension = File::extension($request->file->getClientOriginalName());
if ($extension == "xlsx" || $extension == "xls" || $extension == "csv") {
//'Your file is a valid xls or csv file'
}else {
//'File is a '.$extension.' file.!! Please upload a valid xls/csv file..!!');
}
}
ネームスペースにインクルードする必要がありますuse File;
この方法でファイルを検証できます、ありがとうございます。
laravelで提供されているバリデーターを試してみましたが、すべてが機能していないようです。それは、通常のphpを使用して検証しようとするアイデアをもたらし、それはchamのように機能します
$extensions = array("xls","xlsx","xlm","xla","xlc","xlt","xlw");
$result = array($request->file('import_file')->getClientOriginalExtension());
if(in_array($result[0],$extensions)){
// Do something when Succeeded
}else{
// Do something when it fails
}