我正在尝试在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',消息'错误执行“PutObject”on“https://s3-us-west-2.amazonaws.com/sdfsdf/demoer/”;
AWS HTTP错误:客户端错误:411 MissingContentLength(客户端):您必须提供Content-Length HTTP标头。
答案 0 :(得分:2)
此错误是由于您没有传递任何图像或对象。也传递一个对象。 我也遇到过类似的问题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
答案 1 :(得分:1)
问题很简单,Amazon S3实际上没有目录。
现实情况是,对象路径中的斜杠会创建目录的外观(并且AWS Console界面允许您进行交互,就像对象在目录中一样)。
所以,要创建一个目录,你必须上传一个对象,在Git中没有目录,所以用户经常创建一个名为.gitkeep
的文件来“保存”一个不应该包含任何文件的目录承诺。如果你真的不想推送实际文件,你可以做类似的事情。