Laravel 10中使用Intervention重设图片尺寸并同名同位置保存异常
解决Laravel 10中Intervention图片调整尺寸后保存路径错误及空文件问题
问题根源
你遇到的两个核心问题:
- 错误路径:
Storage::disk('public')->put()的第一个参数应该是相对于磁盘根目录的路径,而非绝对路径。你传入了storage_path()生成的绝对路径,导致Laravel把这个绝对路径拼接到了public磁盘的根目录(storage/app/public/)后面,生成了错误的嵌套路径。 - 空文件:Intervention的图片对象不能直接传给
put()方法,需要先将其编码为可存储的二进制内容。
正确实现方式
方法1:使用Laravel Storage系统保存
调整代码,改用相对磁盘的路径传递给put(),同时调用encode()获取图片编码内容:
$manager = new ImageManager(); $resizedImage = $manager->make(storage_path('app/public/image/' . $uniqueFileName))->resize(100, 100); // 传入public磁盘的相对路径,同时传入图片编码后的内容 Storage::disk('public')->put('image/' . $uniqueFileName, $resizedImage->encode());
方法2:直接用Intervention的save方法(更简洁)
既然已获取到图片对象,可直接调用save()方法写入目标路径,无需通过Storage系统:
$manager = new ImageManager(); $manager->make(storage_path('app/public/image/' . $uniqueFileName)) ->resize(100, 100) ->save(storage_path('app/public/image/' . $uniqueFileName));
补充说明
- 默认public磁盘配置下,
storage/app/public/是根目录,所以Storage::disk('public')->put('image/xxx.jpg')会对应到storage/app/public/image/xxx.jpg,和你之前storeAs()的存储路径完全一致。 - 若需保留原文件、生成缩略图,只需修改保存的文件名即可,比如
$uniqueFileName . '_thumb.jpg'。
内容的提问来源于stack exchange,提问作者tolga
相关产品推荐
相关产品推荐

