我将图像保存到我的s3存储桶但是虽然我看到保存的文件但我无法打开它们。在Firefox中我得到错误"图像无法显示,因为它包含错误"。将图像保存到服务器时,此代码有效,所以我只是将其更改为相应保存到存储桶中:
$s3 = S3Client::factory(array(
'region' => $region,
'version' => $version
));
$bucket = "test";
$file_path = $bucket . "/this/is_working/";
try {
$content_type = "image/" . $extension;
// Upload a file.
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $file_path,
'ACL' => 'public-read',
'ContentType' => $content_type,
'Body' => $_FILES['picture']['tmp_name']
));
正如我所说,我确实看到了文件名为.png的文件,但每当我尝试获取链接http://region.amazonaws.com/bucket/file
时,由于包含错误而无法显示'。对这一个有什么想法吗? TYVM为您提供帮助......
答案 0 :(得分:0)
我认为如果您现在打开其中一个图片,您会发现它是一个文本文件,其中包含您尝试上传的文件的名称。
尝试在putObject调用中使用'SourceFile'而不是'Body':
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $file_path,
'ACL' => 'public-read',
'ContentType' => $content_type,
'SourceFile' => $_FILES['picture']['tmp_name']
));
或者打开文件并流式传输内容:
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $file_path,
'ACL' => 'public-read',
'ContentType' => $content_type,
'Body' => fopen($_FILES['picture']['tmp_name'], 'r+')
));
SDK文档提供了更多示例http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.S3.S3Client.html#_putObject