2017-03-06 99 views
0

我想验证使用laravel验证上传的文件,但我有问题。Laravel图像上传验证

这里是我的代码:

$this->validate($request, [ 
     'image' =>'mimetypes:image/jpeg,image/png,image/gif', 

     ]); 

     $avatar = $request->file('image'); 

     $fileName = time(). '.' . $avatar->getClientOriginalExtension(); 
     Image::make($avatar)->resize(300,300)->save(public_path('uploads/avatar/' . $fileName)); 

     $user = Auth::user(); 
     $user->avatar = $fileName; 
     $user->save(); 

的问题是,当我使用一个bmp文件,我得到这个错误: Gd error

我使用的干预形象包装。我宁愿不转向想象力的司机。

任何想法?

+0

我想你必须在图像阵列中声明BMP哑剧。像这样:'image'=>'mimetypes:image/jpeg,image/png,image/gif,image/bmp', –

+0

你正在使用哪种干涉图像包版本? –

回答

0

望着干预封装代码,你可以看到两种实现的processBmp功能:

干预/图片/ GD/Encoder.php:

protected function processBmp() 
{ 
    throw new \Intervention\Image\Exception\NotSupportedException(
     "BMP format is not supported by Gd Driver." 
    ); 
} 

干预/图片/ Imagick/Encoder.php:

protected function processBmp() 
{ 
    $format = 'bmp'; 
    $compression = \Imagick::COMPRESSION_UNDEFINED; 
    $imagick = $this->image->getCore(); 
    $imagick->setFormat($format); 
    $imagick->setImageFormat($format); 
    $imagick->setCompression($compression); 
    $imagick->setImageCompression($compression); 
    return $imagick->getImagesBlob(); 
} 

所以我认为这是肯定地说,你不能用GD司机做到这一点,只能用imagick。

0

只需使用"intervention/image": "~2"或将您的驱动程序更改为Imagick。 GD本身不支持BMP是已知的问题。您可以查看issue page on github了解详情。

0

为什么你不使用Laravel自定义规则的图像image

$this->validate($request, [ 
     'image' =>'image', 

     ]); 
0

希望这个解决方案将解决您的错误,请尝试下面的逻辑

public function postUpload(Request $request) 
    { 

    $input = $request->all(); 
    $rules = array(
     'uploadFile' => 'image|max:8000' 
    ); 

    $validation = Validator::make($input, $rules); 

    if ($validation->fails()) 
    { 
     return array(
      'validation_failed' => true, 
      'errors'   => $validation->errors()->toArray() 
    ); 
    } 

    $file = $request->uploadFile; 
    $destinationPath = 'uploads/img'; 

    // Get real extension according to mime type 
    $ext = $file->extension(); 
    // Hash processed file name, including the real extension 
     $hashname   = date('H.i.s').'-'.md5($request->_token).'.'.$ext; 
     $upload_success  = $request->uploadFile->storeAs($destinationPath, $hashname); 


     Image::configure(array('driver' => 'imagick')); 
     $img = Image::make(storage_path() . '/app/uploads/img/' . $hashname); 
     $img->resize(230, null, function ($constraint) { 
       $constraint->aspectRatio(); 
     }); 
     $img->save(storage_path() . '/app/uploads/lowres/' .$hashname ,80); 

     $user_image = new User_images(); 
     $user_image->id_user = Auth::user()->id; 
     $user_image->handler = $hashname; 
     $user_image->save(); 


     return array('status' => 'success','message'=> 'Image has been uploaded successfully','file_path'=>'/uploads/'.$hashname);