Amazon aws s3 content header


Amazon aws s3 content header

我正在尝试在amazon aws s3中创建目录,为此我正在尝试以下代码(我使用v3 php sdk)

$bucketName = 'somebucketName';
$key = 'folderName';
$params = [
    'Bucket' => $bucketName,
    'Key' => $key . '/'
  ];
$s3->putObject($params);

$s3是$s3 = new Aws'S3'S3Client类的实例,我在当前配置下成功获取桶和对象。

它之前工作正常,但现在我得到错误

致命错误:未捕获的异常'Aws'S3' exception 'S3Exception',提示'在' https://s3-us-west-2.amazonaws.com/sdfsdf/demoer/'上执行"PutObject"错误;

AWS HTTP error: Client error: 411 MissingContentLength (Client):你必须提供Content-Length HTTP报头。

这个错误是由于您没有传递任何图像或对象来放置。也传递一个对象。我也遇到过类似的问题https://stackoverflow.com/questions/32117596/aws-s3-uploaded-images-are-getting-corrupted检查下面的代码。

  try {
    $result = $s3->putObject(array(
       'Bucket' => $bucketName,
       'Key' =>  $key . '/',
       'SourceFile' => $filepath, // file path which is putting on AWS S3, Path should be absolute path like $filepath = "/var/www/html/for_testing_aws/assets/img/avtar.png";
       'ContentType' => mime_content_type($filepath),
   ));
} catch (S3Exception $e) {
   echo $e->getMessage() . "'n";
}

查看更多信息AWS putObject

问题很简单,Amazon S3实际上没有目录。

实际情况是,对象路径中的斜杠创建了目录的外观(AWS控制台接口允许您交互,就好像对象在目录中一样)。

所以,要创建一个目录,你必须上传一个对象,在Git中没有目录,所以用户经常创建一个名为.gitkeep的文件来"保存"一个不应该有任何文件提交的目录。如果你真的不想推送一个实际的文件,你也可以做类似的事情。