保存的图片无法显示,因为它包含错误'

时间:2015-11-09 13:50:32

标签: php amazon-web-services amazon-s3

我将图像保存到我的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为您提供帮助......

1 个答案:

答案 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