我正在尝试构建一个图像上传对象并附加到 Laravel 中的请求。
我目前有一个中间件可以拦截请求并检查其中是否有 base64 图像字符串,如果有,它将其转换为图像对象并将其附加回请求。
我没有成功将转换后的图像附加回请求作为一个实例,我Illuminate\Http\UploadedFile
已经尝试了一些我发现的最接近的东西UploadedFile::fake()->image('avatar.jpg');
但是我如何使用我自己的 base64 转换后的图像而不是通过 UploadedFile 生成假图像Api我无法提出解决方案。
这是我到目前为止所拥有的
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\UploadedFile;
class Base64EncodedImageHandler
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->has('photos')) {
$validator = Validator::make($request->all(), [
'photos' => 'nullable|array|filled',
'photos.*' => 'required_unless:photos,'.null.'|image',
]);
if ($validator->fails()) {
$images = collect($request->input('photos'))->map(function ($item, $key) {
if (preg_match('/^data:image\/(\w+);base64,/', $item)) {
$data = substr($item, strpos($item, ',') + 1);
$data = base64_decode($data);
// Testing to see if the image decoding worked
// Storage::disk('local')->put("public/test/".uniqid().".png", $data);
// Build image object
return $data;
}
return $item;
});
$request = $request->merge(['photos' => $images]);
}
// Dumping request object here
dd($request);
}
return $next($request);
}
}
MMTTMM