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

如何在Laravel的public目录上传图片?解决路径显示异常问题

解决Laravel图片上传存绝对路径导致asset()生成错误URL的问题

问题核心是move()方法返回的是本地绝对路径,直接存入数据库后,asset()会把这个绝对路径拼接到站点URL后,生成无效的访问链接。

直接修改代码方案

只需要存入相对于public目录的相对路径,即可让asset()生成正确URL:

if ($request->hasFile('images')) {
    $uploaded_images = $request->file('images');
    foreach ($uploaded_images as $upload_image) {
        $image_hash_name = uniqid().'.'.$upload_image->getClientOriginalExtension();
        // 执行文件移动,无需用返回值存储路径
        $upload_image->move(public_path('images/product'), $image_hash_name);
            
        $image = new Image;
        // 存入相对public目录的路径,而非绝对路径
        $image->image = 'images/product/' . $image_hash_name;
        $image->product_id = $new_product_id->id;
        $image->save();
    }
    return redirect()->route('admin.products.index');
}

修改后,使用asset($image->image)会生成正确的访问链接,例如:http://127.0.0.1:8000/images/product/64b14097befca.png。

更符合Laravel最佳实践的方案

使用Storage门面处理上传,默认会返回相对路径:

// 确保config/filesystems.php中public磁盘的root指向public_path()
if ($request->hasFile('images')) {
    $uploaded_images = $request->file('images');
    foreach ($uploaded_images as $upload_image) {
        $image_hash_name = uniqid().'.'.$upload_image->getClientOriginalExtension();
        // storeAs返回相对于public目录的路径
        $path = $upload_image->storeAs('images/product', $image_hash_name, 'public');
            
        $image = new Image;
        $image->image = $path;
        $image->product_id = $new_product_id->id;
        $image->save();
    }
    return redirect()->route('admin.products.index');
}

后续用asset($image->image)或Storage::url($image->image)均可生成有效链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:15:10