我知道这个问题听起来很重复,但是一团糟。
我是Laravel的新手。来自php背景。 我正在使用下面的代码来验证laravel 5.7.8中的图像。它通过检查文件扩展名,大小等来进行验证。现在,我想检查mimetype作为保护文件上传的一种方式,从而确保代码
$rules= [
'file' => 'mimes:jpeg,bmp,png,gif'
];
$x = $request->all();
$validator=Validator::make($x, $rules);
if ($validator->passes()){
Session::flash('message','File Uploads successful.');
}else{
Session::flash('message','Invalid File type .');
}
我的问题是上传无效文件时,它没有返回错误消息,例如 Invalid File type 。
下面是我将其添加到主控制器中的方式。其他所有检查都可以。我只希望代码在上传不是图像的文件时打印无效的文件类型
<?php
namespace App\Http\Controllers;
use Session;
use Validator;
use Illuminate\Http\Request;
class PictureController extends Controller{
public function picture(){
return view('picture');
}
public function uploadFile(Request $request){
if ($request->input('submit') != null ){
$file = $request->file('file');
// File Details
$filename = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$tempPath = $file->getRealPath();
$fileSize = $file->getSize();
$mimeType = $file->getMimeType();
//dd($mimeType = $file->getMimeType());
// Valid File Extensions
$valid_extension = array("jpg","jpeg","png");
//validate files uploads mimetype
$rules= [
'file' => 'mimes:jpeg,bmp,png,gif'
];
$x = $request->all();
$validator=Validator::make($x, $rules);
// 2MB in Bytes
$maxFileSize = 2097152;
// Check file extension
if(in_array(strtolower($extension),$valid_extension)){
// validate mimetype
if ($validator->passes()){
// Check file size
if($fileSize <= $maxFileSize){
// File upload location
$location = 'images';
// Upload file
$file->move($location,$filename);
Session::flash('message','Upload Successful.');
}else{
Session::flash('message','File too large. File must be less than 2MB.');
}
//validator starts
}else{
Session::flash('message','Invalid File type');
}
//validator ends
}else{
Session::flash('message','Invalid File Extension1.');
}
}
// Redirect to index
return redirect()->action('PictureController@picture');
}
}
答案 0 :(得分:0)
尝试:
$validate = $request->validate([
'file' => 'mimes:jpeg,bmp,png,gif'
]);
而不是:
$rules= [
'file' => 'mimes:jpeg,bmp,png,gif'
];
$x = $request->all();
$validator=Validator::make($x, $rules);
答案 1 :(得分:0)
我的问题是返回会话Flash响应调用的方式。如果我使用dd()
的{{1}}函数回显响应消息,它将起作用,因此现在可以正常工作。由于我正在使用angularjs,因此现在我将服务器响应作为json调用返回,并且工作正常...谢谢
dd(....)