Laravel中如何将图片存储至指定目录并自定义文件名
Laravel图片存储路径与文件名问题解决
问题原因分析
你的代码存在两个核心问题:
- 磁盘目录错误:
local磁盘的默认根目录是storage/app,所以你指定的books/'.$isbn会指向storage/app/books,而非目标的storage/app/public/books。 - 文件名自动生成:
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
相关产品推荐
相关产品推荐

