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

Laravel 9图片上传后数据库存储tmp路径问题求助

Laravel 9 图片上传问题:数据库存储临时文件路径而非自定义文件名

问题详情

首次使用Laravel 9,需实现以下功能:上传图片到服务器public/image文件夹,将自定义文件名存入数据库,最后在视图中展示图片。目前图片已成功按自定义名称保存到目标文件夹,但数据库中存储的是临时文件路径(如D:\xampp\tmp\php5819.tmp),需解决该问题。

控制器代码

public function create()
{
    $student = Student::all();
    return view('create', ['addstudent' => $student]);
}

public function save(Request $request)
{
    $newName = '';
    if ($request->file('image')) {
        $extension = $request->file('image')->getClientOriginalExtension();
        $newName = $request->name . '-' . now()->timestamp . '.' . $extension;
        $request->file('image')->storeAs('image', $newName, 'public');
    }

    $request['image'] = $newName;
    $student = Student::create($request->all());

    if ($student) {
        session()->flash('success', 'Data berhasil ditambahkan');
        session()->flash('pesan', 'Data berhasil ditambahkan');
    }
    return redirect('/about');
    // dd($request->all());
}

图片展示视图代码

@extends('layouts.templates')
@section('title', 'Detail')
@section('content')
<div class="container">
    <div class="row">
      <h1>Student Detail</h1>
      <div class="my-3">
        <img src="{{asset('image'.$student->image)}}" alt="{{ $student->name}}">
      </div>
      <h3>Nama : {{$student->name}}</h3>
      <h3>Gender : 
      @if ($student->gender == 'P')
        Perempuan
      @else
        Laki - laki
      @endif</h3>
      <h3>NIM : {{$student->NIM}}</h3>
      <a href="/about">Back</a>  
    </div>
</div>
@endsection

表单代码

@extends('layouts.templates')
@section('title', 'Add Student')
@section('content')
<div class="container">
    <div class="row">
        <div class="col-8 m-auto">
            <h2 class="my-3">Form Add Student</h2>
            <form action="save" method="post" enctype="multipart/form-data">
                @csrf
                <div class="form-group">
                    <label for="name">Nama </label>
                    <input name="name" type="text" class="form-control" id="name" aria-describedby="emailHelp"
                        placeholder="Masukkan Nama" required>
                </div>
                <div class="form-group">
                    <label for="gender">Gender</label>
                    <select name="gender" id="gender" class="form-control" required>
                        <option value="">Pilih</option>
                        <option value="L">L</option>
                        <option value="P">P</option>
                    </select>
                </div>
                <div class="form-group mb-3">
                    <label for="NIM">NIM</label>
                    <input name="NIM" type="text" class="form-control" id="NIM" placeholder="Masukkan NIM">
                </div>
                <label for="NIM">Image</label>
                <div class="input-group mb-3">
                    <input type="file" class="form-control" id="image" name="image"
                        aria-describedby="inputGroupFileAddon04" aria-label="Upload">
                </div>
                <div class="form-group row">
                    <div class="col-sm-10 mb-5">
                        <button type="submit" class="btn btn-primary">Add</button>
                    </div>
                </div>
            </form>
            <a href="/about">Back</a>
        </div>
    </div>
</div>
@endsection

问题分析与解决方案

问题核心:$request->all()会优先读取原始的image字段(即临时文件对象),直接修改$request['image']无法覆盖原始数据,导致数据库存入临时路径。

解决方法1:用merge修改请求数据

将控制器中$request['image'] = $newName;替换为:

$request->merge(['image' => $newName]);

merge方法会正确更新请求的输入集合,后续$request->all()会包含修改后的自定义文件名。

解决方法2:手动构建数据数组

放弃$request->all(),手动筛选字段并创建数据:

$student = Student::create([
    'name' => $request->name,
    'gender' => $request->gender,
    'NIM' => $request->NIM,
    'image' => $newName
]);

这种方式更安全,能避免请求中未预期字段的干扰,同时确保image字段使用自定义值。

额外优化:修复视图图片路径

当前视图中asset('image'.$student->image)缺少斜杠,会导致路径错误,修改为:

<img src="{{asset('image/'.$student->image)}}" alt="{{ $student->name}}">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:45:15