Laravel图像上传验证

问题描述 投票:0回答:4

我正在尝试使用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

我正在使用Intervention图像包。我宁愿不切换到想象力的驱动程序。

有任何想法吗?

php laravel validation laravel-5
4个回答
0
投票

查看Intervention包代码,您可以看到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驱动程序,只有想象力才能做到这一点。


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);
© www.soinside.com 2019 - 2024. All rights reserved.