我使用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>
有什么想法吗?
答案 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