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

Laravel 上传图片存储到非public目录后前端仅显示缩略图问题求助

Laravel 上传图片仅显示缩略图问题修复方案

核心问题原因

你执行的php artisan storage:link命令仅用于将项目的storage/app/public目录映射到public/storage目录,而你当前把上传文件存放在项目根目录的Uploads文件夹中,该目录并未和public目录建立访问映射,所以asset()函数无法正确读取到对应文件,最终导致图片加载失败仅显示缩略图标。

可选解决方案

方案1:调整上传路径到Laravel默认公共存储目录(推荐)

该方案符合Laravel官方文件存储规范,安全性更高:

  1. 修改上传控制器存储路径:
$file = $request->file('images')->getClientOriginalName();
$filename = time().$file;
// 路径调整为storage下的公共可访问目录
$path = storage_path('app/public/Uploads');
if($request->hasFile('images')){
    $file = $request->file('images');
    $file->move($path, $filename);
    // 修正原insert写法错误,需传入键值对数组
    DB::table('books')->insert([
        'images' => $filename,
        // 补充你的其他字段对应值
    ]);
    return redirect('home')->with('status', 'insert succesfully');
}
else {
    dd('Request Hash No File!');
}
  1. 修改前端视图图片访问路径:
@foreach ($booksDTL as $deTailsB)
     <div class="col-md-4">
       <!-- 路径调整为storage下的映射路径 -->
       <img src="{{ asset('storage/Uploads/'.$deTailsB->images) }}" width="100%" height="100%" title="{{ $deTailsB->images }}"/>
     </div>
     <div class="col-md-6">
          <H1>{{ ucfirst(trans($deTailsB->name)) }}</H1>
          <p>{{ strtoupper($deTailsB->author) }}</p>
     </div>
@endforeach

方案2:手动为根目录Uploads创建软链接

如果你不想修改现有上传逻辑,可以手动创建软链接将根目录Uploads映射到public目录下:

  • Linux/Mac 终端执行:
    ln -s /你的项目完整根路径/Uploads /你的项目完整根路径/public/Uploads
  • Windows 管理员身份运行CMD执行:
    mklink /d 你的项目完整根路径\public\Uploads 你的项目完整根路径\Uploads
    配置完成后无需修改原有前端代码,即可正常访问图片。

额外注意事项

原有代码中DB::table('books')->insert($filename);写法不符合Laravel查询构造器规范,insert方法需要传入键值对数组,否则会触发SQL语法错误,建议同步修正该部分逻辑。

内容的提问来源于stack exchange,提问作者Shabrina Nurdiani S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:15:02