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

Laravel 5.5中Storage::delete方法无法正常工作的问题咨询

为什么Laravel 5.5的Storage::delete无法删除文件?

这个问题的核心是Laravel的Storage facade默认的文件系统根目录和你要操作的文件路径不匹配,我来给你拆解清楚:

1. 先搞懂Laravel Storage的默认规则

Laravel的Storage类默认使用的是local磁盘,它的根目录是项目里的storage/app/,而你要删除的文件是放在项目根目录的public/文件夹下,这俩压根不是一个路径,所以Storage::delete自然找不到文件。

你用unlink($image_path)能成功,是因为public_path()直接指向了项目的public目录,路径完全匹配,所以能找到并删除文件。

2. 解决方法分两种,看你的需求选

方法一:直接配置一个指向public目录的磁盘

打开config/filesystems.php,在disks数组里添加一个新的磁盘配置:

'disks' => [
    // 保留原来的local、public等配置
    'public_root' => [
        'driver' => 'local',
        'root' => public_path(), // 直接指向项目的public目录
        'visibility' => 'public',
    ],
]

然后删除文件的时候,指定使用这个磁盘:

use Illuminate\Support\Facades\Storage;

$postroute_ori = '/images/120_5.JPG';
// 注意去掉路径开头的斜杠,避免多余层级
Storage::disk('public_root')->delete(ltrim($postroute_ori, '/'));

方法二:遵循Laravel的Storage规范(更推荐)

Laravel推荐把用户上传的文件放在storage/app/public目录下,然后通过php artisan storage:link命令创建一个软链接到public/storage,这样前端就能通过/storage/xxx访问文件。

这种情况下,你删除文件的代码应该写成:

// 假设文件实际存在于 storage/app/public/images/120_5.JPG
Storage::delete('public/images/120_5.JPG');
// 或者直接指定public磁盘,写法更简洁
Storage::disk('public')->delete('images/120_5.JPG');

3. 顺便说下你用File::delete失败的原因

你写的File::delete('/images/120_5.JPG')里的路径是系统绝对路径,它会从你的磁盘根目录(比如D:\)去找images/120_5.JPG,而不是项目的public目录,所以要改成:

File::delete(public_path('images/120_5.JPG'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:21:08