You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel 7中实现图片上传并存储到数据库 食品分类场景示例

前置准备

  • 确认categories数据表中imagename字段为varchar(255)字符串类型,足够存储图片文件名
  • 执行命令php artisan storage:link,将Laravel存储目录映射到公共访问目录,否则前端无法读取上传的图片

控制器store方法修改

将原store方法替换为以下代码,新增请求验证、图片上传处理逻辑:

public function store(Request $request)
{
    // 请求参数验证
    $validated = $request->validate([
        'title' => 'required|string|max:255',
        'imagename' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048', // 限制仅允许2M以内的常见格式图片
    ]);

    $category = new \App\Category();
    $category->title = $validated['title'];
    
    // 处理上传的图片文件
    if ($request->hasFile('imagename')) {
        $imageFile = $request->file('imagename');
        // 生成唯一文件名,避免重名覆盖原有文件
        $saveFileName = time() . '_' . uniqid() . '.' . $imageFile->getClientOriginalExtension();
        // 存储到storage/app/public/categories目录下
        $imageFile->storeAs('public/categories', $saveFileName);
        // 将生成的文件名写入数据库
        $category->imagename = $saveFileName;
    }

    $category->featured = $request->has('featured');
    $category->active = $request->has('active');
    $category->save();

    session()->flash('success', "分类'{$category->title}'创建成功");
    return redirect()->route('category.index');
}

你现有的表单代码已经正确设置了enctype="multipart/form-data"属性,无需额外修改。如果不需要强制上传图片,把验证规则中imagename的required去掉,同时给数据表imagename字段设置默认值null即可。

图片前端展示

在列表页、详情页等需要展示分类图片的位置,使用以下代码渲染图片:

<img src="{{ asset('storage/categories/'.$category->imagename) }}" alt="{{ $category->title }}">

可选优化:删除分类时同步删除图片

避免无用图片占用存储空间,可在删除分类的逻辑中加入图片删除代码:

// destroy方法示例
public function destroy(Category $category)
{
    // 先删除本地存储的图片
    $imagePath = public_path('storage/categories/'.$category->imagename);
    if (file_exists($imagePath)) {
        unlink($imagePath);
    }
    $category->delete();
    session()->flash('success', '分类删除成功');
    return back();
}

内容的提问来源于stack exchange,提问作者Tiffany Alexandra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:36:06