Laravel 5介入中的图像确认

eaf3rand  于 2023-01-06  发布在  其他
关注(0)|答案(5)|浏览(119)

我已经在Laravel 5.1中安装了intervention,我正在使用图像上传和调整大小,如下所示:

Route::post('/upload', function()
{
Image::make(Input::file('photo'))->resize(300, 200)->save('foo.jpg');
});

我不明白的是,干预如何处理上传图像的验证?我的意思是,干预是否已经有内置图像验证检查,或者我需要使用Laravel Validation手动添加一些东西来检查文件格式,文件大小,我已经通读了干预文档,我找不到有关使用Laravel干预时图像验证如何工作的信息。
有人能给我指一下路吗?

thtygnil

thtygnil1#

感谢@maytham的评论,他为我指出了正确的方向。
我发现Image Intervention本身并不做任何验证。所有的图像验证都必须在上传之前完成。感谢Laravel的内置验证器,如imagemime类型,这使得图像验证非常容易。这就是我现在所拥有的,在将其传递给图像干预之前,我首先验证文件输入。

    • 处理干预Image类之前的验证程序检查:**
Route::post('/upload', function()
 {
    $postData = $request->only('file');
    $file = $postData['file'];

    // Build the input for validation
    $fileArray = array('image' => $file);

    // Tell the validator that this file should be an image
    $rules = array(
      'image' => 'mimes:jpeg,jpg,png,gif|required|max:10000' // max 10000kb
    );

    // Now pass the input and rules into the validator
    $validator = Validator::make($fileArray, $rules);

    // Check to see if validation fails or passes
    if ($validator->fails())
    {
          // Redirect or return json to frontend with a helpful message to inform the user 
          // that the provided file was not an adequate type
          return response()->json(['error' => $validator->errors()->getMessages()], 400);
    } else
    {
        // Store the File Now
        // read image from temporary file
        Image::make($file)->resize(300, 200)->save('foo.jpg');
    };
 });

希望这个有用。

2hh7jdfx

2hh7jdfx2#

只需将其集成到以获得验证

$this->validate($request, [
    'file' => ['image', 'mimes:jpeg,png,jpg,gif,svg', 'max:2048'],
]);
yyyllmsg

yyyllmsg3#

支持的图像格式http://image.intervention.io/getting_started/formats

可读图像格式取决于所选驱动程序(GD或Imagick)和您的本地配置。默认情况下,介入图像当前支持以下主要格式。

JPEG PNG GIF TIF BMP ICO PSD WebP

全球发展部️✔ ✔ ✔️-️- - - ✔️ *
想象️️️️️️️️力

  • 对于WebP支持,GD驱动程序必须与PHP 5〉= 5.5.0或PHP 7一起使用才能使用imagewebp()。如果使用Imagick,则必须与libwebp一起编译以获得WebP支持。

参见make方法文档,了解如何从不同来源读取图像格式,分别进行编码和保存,了解如何输出图像。
注:(Intervention Image是一个开源PHP图像处理和操作库http://image.intervention.io/)。此库不验证任何验证规则,它由LarvalValidator类完成

拉瑞维尔文件https://laravel.com/docs/5.7/validation
提示1:(请求验证)

$request->validate([
   'title' => 'required|unique:posts|max:255',
   'body' => 'required',
   'publish_at' => 'nullable|date',
]); 

// Retrieve the validated input data...
$validated = $request->validated(); //laravel 5.7

提示2:(控制器验证)

$validator = Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
]);

if ($validator->fails()) {
    return redirect('post/create')
        ->withErrors($validator)
        ->withInput();
}
nr9pn0ug

nr9pn0ug4#

我有一个自定义表单,这个变量不起作用。所以我使用了regexp验证
像这样:

client_photo' => 'required|regex:/^data:image/'

可能会对某些人有帮助

nx7onnlm

nx7onnlm5#

public function store(Request $request)
{
    $room = 1;

    if ($room == 1) {
        //image upload start
        if ($request->hasfile('photos')) {
            foreach ($request->file('photos') as $image) {
                // dd($request->file('photos'));
                $rand = mt_rand(100000, 999999);
                $name = time() . "_"  . $rand . "." . $image->getClientOriginalExtension();
                $name_thumb = time() . "_"  . $rand . "_thumb." . $image->getClientOriginalExtension();
                //return response()->json(['a'=>storage_path() . '/app/public/postimages/'. $name]);
                //move image to postimages folder
                //dd('ok');
                //  public_path().'/images/
                $image->move(public_path() . '/postimages/', $name);
                // 1280
                $resizedImage = Image::make(public_path() . '/postimages/' . $name)->resize(300, null, function ($constraint) {
                    $constraint->aspectRatio();
                });

                // save file as jpg with medium quality
                $resizedImage->save(public_path() . '/postimages/' . $name, 60);
                // $resizedImage_thumb->save(public_path() . '/postimages/' . $name_thumb, 60);
                $data[] = $name;
                       
                //insert into picture table
                $pic = new Photo();
                $pic->name = $name;
                $room->photos()->save($pic);
            }
        }

        return response()->json([
            'success' => true, 
            'message' => 'Room Created!!'
        ], 200);
    } else {
        return response()->json([
            'success' => false, 
            'message' => 'Error!!'
        ]);
    }
}

相关问题