【问题标题】:How to check a blob file is a image in Laravel?如何检查 blob 文件是 Laravel 中的图像?
【发布时间】:2016-11-03 07:39:58
【问题描述】:

我正在使用 Laravel 5.3,
我使用 javascript 裁剪图像并使用 ajax 上传。
上传时将裁剪后的图像更改为 blob 文件。

但是在后台,如何判断blob文件是图片呢?

public function changeAvatar(Request $request)
{
    $user = \Auth::user();
    $blob = $request->croppedImage;
    $destinationPath = 'images/uploads/';
    $fileName = $user->id . '_' . time() . '.png';
    $file = file_put_contents($destinationPath.$fileName, $blob);


     $input = array('image' => $file);
     $rules = array(
         'image' => 'image'
     );
     $validator = \Validator::make($input, $rules);
     if ( $validator->fails() ) {
         return \Response::json([
             'success' => false,
             'errors' => $validator->getMessageBag()->toArray()
         ]);

     }

    $user ->avatar = '/'.$destinationPath.$fileName;
    $user ->save();

    return \Response::json([
        'success'=>true,
        'avatar'=>asset($destinationPath.$fileName),
    ]);
}

文件是图片,但错误总是这样:

{"success":false,"errors":{"image":["image must be an image."]}}

【问题讨论】:

    标签: javascript php laravel


    【解决方案1】:

    您可以使用首位测试来测试 blob 的内容。

    这样,就不需要先上传文件到文件系统,然后再删除。

    这里有解释:answer

    【讨论】:

      【解决方案2】:

      如果可行,试试这个:

      将 blob 写入目标路径后,执行以下操作:

      //...
      $file = file_put_contents($destinationPath.$fileName, $blob);
      
      $uploadedFile = new \Illuminate\Http\UploadedFile($file, "dummy");
      
      $input = array('image' => $uploadedFile);
      //...
      

      Laravel 的图片验证要求文件是 UploadedFile 的实例才能通过验证。

      【讨论】:

      • ErrorException in UploadedFile.php 第 88 行:缺少 Symfony\Component\HttpFoundation\File\UploadedFile::__construct() 的参数 2,在 D:\wnmp\www\laravel-5-3- 中调用dev\app\Http\Controllers\UsersController.php 在第 28 行并定义
      • 对不起。参数二是“originalName”。提供一个虚拟字符串应该没问题。
      猜你喜欢
      • 2014-11-12
      • 2013-11-17
      • 1970-01-01
      • 2010-10-27
      • 2012-06-17
      • 1970-01-01
      相关资源
      最近更新 更多