Laravel中如何获取未保存的Intervention缩放后图片路径
解决Intervention Image缩放图片不保存到本地却获取可fopen路径的问题
核心原因
缩放后的图片仅存在于内存中,没有对应的物理文件路径,所以basePath()返回原上传文件的路径是正常行为。要获取能用于fopen的路径,必须将内存中的图片写入临时文件(系统会自动管理,无需手动清理)。
解决方案代码示例
public function Uploader(Request $request) { $upload_file = $request->file_upload; $new_img = Image::make($upload_file)->resize(800, 544); // 创建唯一临时文件并获取路径 $tempFilePath = tempnam(sys_get_temp_dir(), 'resized_img_'); // 将缩放后的图片写入临时文件 $new_img->save($tempFilePath); // 此时$tempFilePath即可用于fopen操作 $fileHandle = fopen($tempFilePath, 'r'); // 执行你的后续业务逻辑... // 可选:脚本结束后系统会自动清理临时文件,也可手动提前删除 // unlink($tempFilePath); }
补充说明
sys_get_temp_dir():获取系统默认临时目录,跨Windows/Linux/macOS兼容;tempnam():生成全局唯一的临时文件名,避免文件冲突;- 若无需物理路径,也可直接使用图片数据流:通过
$new_img->stream()获取资源流,直接用于后续操作,跳过fopen步骤。
内容的提问来源于stack exchange,提问作者JBA
相关产品推荐
相关产品推荐

