laravel - Laravel 图像路径存储为 .tmp
问题描述
我正在尝试将图像存储在数据库中:
public function update(Request $request, $id)
{
if ($request->hasFile('image')) {
$image = $request->file('image');
$filename = time() . '.' . $image->getClientOriginalExtension();
$path = 'storage/images/' . $filename;
Image::make($image->getRealPath())->resize(300, 300)->save($path);
}
$this->productservice->update($request, $id);
return redirect()->back()->with('status', 'Product has been updated succesfully');
}
我以前在 Laravel 中做过,从来没有遇到过问题。这次我使用的是 Repository-Service 模式,但不确定这是否是导致问题的原因。图像本身被移动到正确的文件夹中,但是数据库中的路径是:
C:\xampp\tmp\php596F.tmp
我已经用谷歌搜索/检查了关于 stackoverflow 的其他建议来解决这个问题,但没有一个有效。
更新 愚蠢的我,我应该从模型的可填充中删除图像,它甚至大部分时间都没有节省任何东西。
解决方案
原因:问题是上传图片时您的请求数据没有更改。所以image
仍然包含tmpdata。
如何修复:确保您添加multipart/form-data
了form
. 在您的控制器中进行验证以确保上传的文件是图像,如下所示:
public function update(Request $request, $id)
{
$validatedData = $request->validate([
'image' => 'required|image|mimes:jpeg,jpg,png,gif',
]);
if ($request->hasFile('image')) {
$image = $request->file('image');
$filename = time() . '.' . $image->getClientOriginalExtension();
$path = 'storage/images/' . $filename;
Image::make($image->getRealPath())->resize(300, 300)->save($path);
$request->replace(['image' => $path]);
}
//$request['image'] = $filename;
$this->productservice->update($request, $id);
return redirect()->back()->with('status', 'Product has been updated succesfully');
}
推荐阅读
- javascript - 使用反应路由器时发送道具
- ruby-on-rails - link_to 和 destroy 方法
- deep-learning - pytorch中检查点之间的线性插值 - 批量标准化
- xml - xml的分组部分
- c - 无法连接两个字符串并从函数返回
- python - 如何在文件中只写一次增量?
- amazon-web-services - 在 PRN 堆栈 Amazon EC2 中上传和获取图像
- fortran - 如何解除分配`char(:), allocatable ::`类型的字符变量?
- python - 'float' 和 'QuerySet' 的实例之间不支持 '<='
- angular - ul 或 table 中的 Angular 显示类别和子类别