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

Laravel中如何将图片存储至指定目录并自定义文件名

Laravel图片存储路径与文件名问题解决

问题原因分析

你的代码存在两个核心问题:

  1. 磁盘目录错误:local磁盘的默认根目录是storage/app,所以你指定的books/'.$isbn会指向storage/app/books,而非目标的storage/app/public/books。
  2. 文件名自动生成:Storage::put()方法传入文件对象时,Laravel会自动生成随机哈希文件名,不会使用你指定的命名规则。

正确实现代码

方式一:使用public磁盘(推荐)

public磁盘的默认根目录就是storage/app/public,直接指定子目录即可:

$image = $request->file('imgInp');

// 先验证文件有效性
if ($image->isValid()) {
    // 使用putFileAs指定存储目录、文件对象和自定义文件名
    Storage::disk('public')->putFileAs('books', $image, $isbn . '.jpg');
}

执行后图片会被存储到storage/app/public/books/{$isbn}.jpg,完全符合你的需求。

方式二:使用local磁盘指定完整路径

如果一定要用local磁盘,需要明确指定public/books路径:

$image = $request->file('imgInp');

if ($image->isValid()) {
    Storage::disk('local')->putFileAs('public/books', $image, $isbn . '.jpg');
}

额外说明:图片访问

如果需要通过前端URL访问这些图片,需要先执行Laravel的存储链接命令:

php artisan storage:link

该命令会在项目根目录的public文件夹下创建storage软链接,指向storage/app/public。之后就可以通过如下URL访问图片:

asset('storage/books/' . $isbn . '.jpg')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:43:13