AWS S3 文件上传但存储桶中的文件没有大小?

Posted

技术标签:

【中文标题】AWS S3 文件上传但存储桶中的文件没有大小?【英文标题】:AWS S3 file uploads but files in bucket has no size? 【发布时间】:2020-05-20 19:43:38 【问题描述】:

大家好。我想将多个图像文件上传到我的 S3 存储桶,我能够做到这一点。将文件上传到我的 AWS S3 存储桶后,我遇到的唯一问题是文件存在,但所有图像文件的大小 = 0。什么可能导致此问题?我正在使用最新版本的 AWS S3 php SDK,下面的代码将大致展示我的尝试: Amazon S3 Dashboard

//Get all our files
$allFiles = $_FILES['files'];

//create an array to store all of our commands
$commands = array();
$imgURLArray = array();
$temp_files_array=array();


for($i=0; $i<count($_FILES['files']['name']); $i++) 
    
    //properties for creating nd placing the temporary file:
    $name = $allFiles['name'][$i]; // Get the origanal img name
    $tmp_name = $allFiles['tmp_name'][$i]; //get the original temp_name
    $extension = explode('.', $name);  // get the file extension
    $extension = strtolower(end($extension)); //make sure the extension is in lowercase
    $randomGeneratedName = md5(uniqid()); // Generate a new unique name for our temp file 
    $tmp_file_path = "../../tmp_files/$randomGeneratedName.$extension"; 

    //move our temporary to the temp_folder file
    move_uploaded_file($tmp_name, $tmp_file_path);

    //Bucket properties
    $bucket = $config["buckets"]['mybucket'];
    $path =  $config["product"]['path'];
    $imgName= 'product'. $productID.$i.'.'.$extension;
    $body = fopen($tmp_file_path, 'rb');
    $acl = 'public-read';

    //Command parameters
    $objParams = 
    [
        'Bucket' => $bucket,
        'Key' => $path.$imgName,
        'body' => $body,
        'ACL' => $acl
    ];

      $commands[] = $s3Client->getCommand('PutObject', $objParams);
      $url = $config['bucket']['url'].$path.$imgName;
      array_push($temp_files_array,$tmp_file_path);
      array_push($imgURLArray, $url);


 $pool = new CommandPool($s3Client,$commands);
 $promise = $pool->promise();
 $promise->wait();

【问题讨论】:

【参考方案1】:

如此荒谬的问题和解决方案......

在我的 $objParams 数组中,我用小写的“b”而不是大写的“B”声明了“Body”键,因此该数组的正确版本应该是这样的:

$objParams = 
[
 'Bucket' => $bucket,
 'Key' => $path.$name,
 'Body' => $body,
  'ACL' => $acl
];

【讨论】:

是的。选择一个变量命名约定并坚持下去。 $imgURLArray$temp_files_array 在同一个代码库中没有任何意义。 AWS 也有一个约定。

以上是关于AWS S3 文件上传但存储桶中的文件没有大小?的主要内容,如果未能解决你的问题,请参考以下文章

AWS:将 IAM 用户限制在 S3 存储桶中的特定文件夹

默认情况下,如何将 AWS S3 存储桶中的所有对象设为公开?

使用 boto3 lib 和 AWS Lambda 从 S3 存储桶中的压缩文件中获取数据流

使用AWS SDK将文件上载到存储桶中的特定文件夹

使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶

使用 NodeJS 和 AWS S3 将损坏/截断的 mp4 上传到 S3 存储桶