我從 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?
uj5u.com熱心網友回復:
在AWS PHP SDK檔案具有的描述SourcePath:
要使用的磁盤上檔案的路徑,而不是 Body 引數。
但是您沒有在磁盤上提供檔案,而是提供了URL。
您有兩個選擇:
- 根據路徑在服務器上的位置提供路徑的磁盤位置。例如,使用
__DIR__來參考當前PHP檔案的目錄,它可能是$file_Path = __DIR__ . '/../public/msk.png'; - 首先下載內容,并將其作為字串傳遞給
Body引數而不是SourcePath,例如使用$body = file_get_contents($File_Path);
如果它是您自己服務器上的檔案,則第一個選項更有意義,但如果您簡化了示例,則第二個選項可能有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371298.html
