验证laravel部分工作的图像

时间:2018-10-08 16:47:31

标签: php laravel

我知道这个问题听起来很重复,但是一团糟。

我是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');
   }
}

2 个答案:

答案 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(....)