Laravel使用Intervention Image调整图片大小出现无法写入路径错误
问题原因
- 核心错误是路径拼接重复:你定义的
$tmpFilePath已经通过public_path()返回了站点根目录下的完整绝对路径(例如/var/www/html/public/upload/properties/),后续生成缩略图存储路径时又再次调用public_path($tmpFilePath),相当于把完整路径又拼接了一次,最终生成的无效路径没有对应目录,自然无法写入文件。 - 次要可能原因:目标存储目录不存在、目录没有写入权限。
修复方案
1. 修正路径拼接逻辑
去掉生成缩略图路径时多余的public_path()调用,同时新增目录存在性判断,避免目录不存在导致的写入失败,修正后代码如下:
$featured_image = $request->file('featured_image'); $tmpFilePath = public_path('upload/properties/'); // 已经是完整绝对路径 // 提前判断目录不存在则创建,同时设置权限 if (!file_exists($tmpFilePath)) { mkdir($tmpFilePath, 0755, true); } $name = 'property_'.time().'.'.$featured_image->extension(); $featured_image->move($tmpFilePath, $name); // 图片缩放处理 $image_original_path = $tmpFilePath.$name; $image_resize = Image::make($image_original_path); $image_resize->resize(383,251); // 去掉多余的public_path调用 $resize = $tmpFilePath.'thumb_'.$name; $image_resize->save($resize);
2. 确认目录权限
确保public/upload/properties目录的所属用户和web运行用户(比如www-data、nginx)一致,权限至少设置为755,可通过以下命令调整(根据实际环境修改路径和用户):
chown -R www-data:www-data /var/www/html/public/upload chmod -R 755 /var/www/html/public/upload
内容的提问来源于stack exchange,提问作者إرتقاء
相关产品推荐
相关产品推荐

