【发布时间】:2021-05-03 17:14:10
【问题描述】:
我有一个使用 React 和 Laravel 的应用程序来上传图片。 我正在使用Laravel Image Intervention package。
在测试我的 API 时,正常图像的上传工作完美。
使用 React,用户可以从他的电脑中选择一个图像并对其进行裁剪,然后他会将预览视为生成的裁剪后的 64base 图像。
我想将生成的 64base 图片上传到我的数据库,而不是普通的,该怎么做?
Fileupload controller
public function Store(Request $request)
{
$this->validate($request, [
'filename' => 'image|required|mimes:jpeg,png,jpg,gif,svg'
]);
$originalImage= $request->file('filename');
$thumbnailImage = Image::make($originalImage);
// Define upload path
$originalPath = public_path('/images/');
// Save Orginal Image
$thumbnailImage->save($originalPath.time().$originalImage->getClientOriginalName());
// Save In Database
$imagemodel= new Photo();
$imagemodel->photo_name=time().$originalImage->getClientOriginalName();
$imagemodel->save();
return back()->with('success', 'Image Upload successful');
}
【问题讨论】:
-
我建议不要这样做。 1. 上传需要更长的时间,并且可能会在较大的文件上超时,2. 您将受益于在服务器端上传原始图像和裁剪(用户选择的内容) - 在这种情况下,裁剪图像是很容易的原图稍后再看。
-
@Gordon Freeman 我明白了。但其实我有一个想法。为什么不直接把64base的代码传到数据库里直接加载呢?
-
这通常取决于您的数据库和您的应用程序。我不会将 base64 图像存储在数据库中,原因有多种:1. 它们的交付速度会慢得多,2. 数据库会占用比必要更多的空间,3. 数据库上的负载会更多(很贵)
-
@Gordon Freeman 你得到了非常有趣的观点。但目前用户无法上传然后裁剪图像。所以我想我会直接将 64base 代码上传到服务器,因为 1.我正在上传小头像文件 2.我在前端设置了上传大小的限制。所以我认为这是一个很好的解决方案,你觉得呢?
-
应该可以。我们经常使用cropperjs。我们解决上传问题的方式是,我们将 x、y、width、height 参数与上传的文件一起传递给服务器。然后保存图像的路径和上述参数,并使用 InterventionImage 处理所有裁剪。工作得很好。
标签: php mysql laravel intervention