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

AWS S3 Bucket上传图片始终为0字节问题求助

解决AWS S3上传文件为0字节的问题

我之前也碰到过一模一样的情况,看了你的代码马上就找到问题根源了——你的putObject调用里完全没指定要上传的文件内容!

问题核心分析

你虽然获取了前端上传文件的基本信息,但在调用S3的putObject方法时,只配置了Bucket名称、文件Key和访问权限,却没告诉S3要上传的具体内容是什么。这就导致S3只能创建一个空的占位文件(也就是0字节的文件)。

修复代码示例

你需要在putObject的参数里添加'Body'字段,把临时文件的内容传进去。这里给你两种常用的实现方式:

  1. 直接通过文件句柄读取(推荐,适合大文件):
$result = $s3->putObject([
    'Bucket' => $bucketName,
    'Key' => $key,
    'ACL' => 'public-read', // 注意这里键名要大写,AWS SDK对参数大小写敏感
    'Body' => fopen($_FILES["left_front"]["tmp_name"], 'rb')
]);
  1. 读取文件内容到变量后传入(适合小文件):
// 先把临时文件内容读入变量
$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:20:49