AWS S3 PHP文件上载。返回网址但不实际上传

时间:2017-11-23 08:35:57

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

我使用AWS SDK for php将文件上传到我的S3存储桶。我已经使用IAM管理器创建了一个单独的用户,并为其提供了对S3的完全访问权限。这是我实现的代码(PHP7,apache2)

$bucket = 'bucketname';

$file_path = $_FILES['fileToUpload']['tmp_name'];
$key = basename($_FILES["fileToUpload"]["name"]);

try{
    //Create a S3Client
    $s3Client = new S3Client([
        'version'     => 'latest',
        'region'      => 'ap-south-1',
        'credentials' => [
            'key'    => 'my-key',
            'secret' => 'secret-key',
        ],
    ]);

    $result = $s3Client->putObject([
        'Bucket'     => $bucket,
        'Key'        => $key,
        'SourceFile' => $file_path,
        'ACL'    => 'public-read',
    ]);

    echo $result['ObjectURL'];
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}

在上传文件时,我会像这样获取网址

https://bucketname.s3.ap-south-1.amazonaws.com/image.png (不是真正的URL)

这是我回来的xml回复

<Error>
    <Code>NoSuchKey</Code>
    <Message>The specified key does not exist.</Message>
    <Key>/image.png</Key>
    <RequestId>E131E328AF9CAF41</RequestId>
    <HostId>gOreLsZBX9V1Whq++BoJVZCKPS415r51IUXXs0zZeIoa16KaXBCzOYKFrYYRktJJBB8HnBSyDTM=</HostId>
</Error>

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我认为你应该试试

  

move_upload_file($ _ FILES [&#34; fileToUpload&#34;] [&#34; tmp_name&#34;],$ path);

$ path是您的存储桶路径

答案 1 :(得分:0)

您的代码中存在多个问题。

  • 您只是捕获S3Exceptions。还可以通过添加以下代码并显示错误来捕获其他异常。您会发现您的代码产生了其他错误。

    } catch(Exception $ e){     echo&#34;错误:&#34; 。 $ e-&gt; getMessage()。 &#34; \ n&#34 ;; }

  • 您缺少用于SSL证书处理的cacert.pem文件。从CA certificates extracted from Mozilla下载此文件并复制到系统上的目录。

  • 使用下载和安装它的完整路径修改您的PHP.INI文件以包含cacert.pem。在PHP.INI部分[openssl]下,添加以下行:

    openssl.cafile = /路径/ cacert.pem