AWS S3 Bucket上传图片始终为0字节问题求助
解决AWS S3上传文件为0字节的问题
我之前也碰到过一模一样的情况,看了你的代码马上就找到问题根源了——你的putObject调用里完全没指定要上传的文件内容!
问题核心分析
你虽然获取了前端上传文件的基本信息,但在调用S3的putObject方法时,只配置了Bucket名称、文件Key和访问权限,却没告诉S3要上传的具体内容是什么。这就导致S3只能创建一个空的占位文件(也就是0字节的文件)。
修复代码示例
你需要在putObject的参数里添加'Body'字段,把临时文件的内容传进去。这里给你两种常用的实现方式:
- 直接通过文件句柄读取(推荐,适合大文件):
$result = $s3->putObject([ 'Bucket' => $bucketName, 'Key' => $key, 'ACL' => 'public-read', // 注意这里键名要大写,AWS SDK对参数大小写敏感 'Body' => fopen($_FILES["left_front"]["tmp_name"], 'rb') ]);
- 读取文件内容到变量后传入(适合小文件):
// 先把临时文件内容读入变量 $fileContent = file_get_contents($_FILES["left_front"]["tmp_name"]); $result = $s3->putObject([ 'Bucket' => $bucketName, 'Key' => $key, 'ACL' => 'public-read', 'Body' => $fileContent ]);
额外需要检查的细节
除了核心的Body参数,还有几个小地方建议你确认:
- 确保
$_FILES["left_front"]["tmp_name"]对应的临时文件存在且可读,避免PHP自动清理了临时文件 - 检查PHP配置文件
php.ini里的upload_max_filesize和post_max_size,确保它们的数值足够容纳你要上传的图片 - 确认你的AWS IAM权限包含
s3:PutObject操作(不过你已经能创建空文件,这个权限大概率是没问题的,但还是可以排查下)
内容的提问来源于stack exchange,提问作者Krishna Ballabh Gupta
相关产品推荐
相关产品推荐

