【发布时间】:2022-01-07 07:23:25
【问题描述】:
我从 aws 文档中获取了示例代码,但我总是收到此错误:IncalculablePayloadException
<?php $filepath = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]";
require 'aws.phar';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$s3Key = 'mykey';
$s3Secret = 'mysecretkey';
$region = 'eu-west-3';
$s3Bucket = 'mybucket';
$bucket = $s3Bucket;
$file_Path = $filepath.'/msk.png';
$key = basename($filepath);
echo $file_Path;
try {
//Create a S3Client
$s3Client = new S3Client([
'profile' => 'default',
'region' => $region,
'version' => '2006-03-01',
// 'debug' => true
]);
$result = $s3Client->putObject([
'Bucket' => $bucket,
'Key' => $key,
'SourceFile' => $file_Path,
]);
} catch (S3Exception $e) {
echo $e->getMessage() . "\n";
}
我已检查我的文件是否存在,路径是否正确。我不知道该怎么做,这应该可行,来自他们该死的医生。 我尝试过使用其他文件,在其他地方找到了不同的代码,但我总是遇到同样的错误。 感谢您的帮助。
编辑 --------- 1
我已将 $file_Path 更改为 $file_Path = 'msk.png';
现在它正在“工作”。它将文件上传到 S3,但不是 png,而是 xml 文件。最后是
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
知道为什么吗? 编辑 --------- 2 好的,现在我知道为什么了,文件的权限未设置为读取以供公共访问。如何使用 putObject 设置 ACL?
【问题讨论】:
-
不应该
$file_Path是本地路径吗?我不知道 AWS。 -
见鬼,就这么简单。我不知道我在哪里看到它需要绝对路径。谢谢@罗伯特
-
现在它正在“工作”,但我在存储桶上的“png”不是 png 而是一个 xml 文件。有任何想法吗?
标签: php amazon-web-services amazon-s3 upload