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

Laravel 5.8用put方法从S3下载文件到本地报目录错误如何解决?

问题描述

我在已创建的目录中使用put方法将文件从s3下载到local磁盘时失败,报错如下:

ErrorException (E_WARNING) : file_put_contents(/path/storage/4804_1626): failed to open stream: Is a directory
经查对应目录已成功创建,我尝试在调用makeDirectory()方法时传入第三个参数设置权限为777,但问题仍然存在。目录权限信息如下:

ubuntu@ip:~/path/storage$ ll
drwxr-xr-x  2 www-data www-data     4096 Sep 20 07:07  4804_1626/

相关代码与配置

$folderPath = Storage::disk('local')->makeDirectory($folderName, 0777);

$contents = Storage::disk('s3')->get('path/' . $fileName);

Storage::disk('local')->put($folderName, $contents); // 此行代码触发报错

问题原因

Storage::put()方法的第一个参数需要传入完整的目标文件路径(包含最终保存的文件名),你当前传入的是预先创建的目录路径$folderName,系统尝试将文件内容写入目录节点,直接触发报错。
你设置的777权限未生效不是本次报错的核心原因:Laravel 文件系统默认会按照配置的权限参数覆盖你传入的权限值,若需自定义目录权限可修改config/filesystems.php中对应磁盘的permission配置,或在目录创建后手动调用chmod修改。

修复代码

$folderPath = Storage::disk('local')->makeDirectory($folderName, 0777);
$contents = Storage::disk('s3')->get('path/' . $fileName);
// 拼接完整文件路径:目录路径 + 文件名
Storage::disk('local')->put($folderName . '/' . $fileName, $contents);

如果你需要更便捷的写入方式,也可以直接使用putFileAs方法,不需要预先读取文件内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:09:03