Scale up as you grow — whether you're running one virtual machine or ten thousand.

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.

Hi!
I’m trying to upload some files to DigitalOcean’s Spaces with PHP and cURL but for some reason I cannot do it. I don’t want to use some libraries like Amazon’s SDK because they are too big. I want something more simple. Here is where I am at now.
$file = '/home/development/www/source.png';
$contents = file_get_contents($file);
$filesize = filesize($file);
$accessKeyId = '###';
$secretKey = '###';
$longDate = gmdate('Ymd\THis\Z');
$shortDate = gmdate('Ymd');
$newfile = urlencode('/new-dir/new-file.png');
$cannonical = 'PUT'.PHP_EOL.''.$newfile.''.PHP_EOL.''.PHP_EOL.'content-length:'.$filesize.''.PHP_EOL.'host:fra1.digitaloceanspaces.com'.PHP_EOL.'x-amz-date:'.$longDate.''.PHP_EOL.'x-amz-acl:public-read'.PHP_EOL.'content-length;host;x-amz-date;x-amz-acl;'.PHP_EOL.''.hash_file('sha256', $file).''.PHP_EOL.'';
$cannonical = hash('sha256', $cannonical);
$string = 'AWS4-HMAC-SHA256'.PHP_EOL.''.$longDate.''.PHP_EOL.''.$shortDate.'/fra1/s3/aws4_request'.PHP_EOL.''.$cannonical.''.PHP_EOL.'';
$signingKey = hash_hmac('sha256', $shortDate, 'AWS4'.$secretKey, true);
$signingKey = hash_hmac('sha256', 'fra1', $signingKey, true);
$signingKey = hash_hmac('sha256', 's3', $signingKey, true);
$signingKey = hash_hmac('sha256', 'aws4_request', $signingKey, true);
$signature = hash_hmac('sha256', $signingKey.$string, $signingKey);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_URL, 'https://bucket.fra1.digitaloceanspaces.com/'.$newfile);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Length: '.$filesize,
'Host: bucket.fra1.digitaloceanspaces.com',
'x-amz-date: '.$longDate,
'x-amz-acl: public-read',
'Authorization: AWS4-HMAC-SHA256 Credential='.$accessKeyId.'/'.$longDate.'/fra1/s3/aws4_request, SignedHeaders=host;x-amz-date;x-amz-acl;content-length, Signature='.$signature
]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $contents);
curl_exec($ch);
echo curl_error($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $http_code;
Every time I try to upload something it says 403 Forbidden. What am I doing wrong in the signature calculation?
Thank you.
donmez.dogan
41809fc37fa549b98a34934d238850
Código de referido Binance
yolanda smith
b1cfd497da4348d08019b0315db7a0
Deeraj EA
1ddffddc31ea402a842dcb134f6134
bec1cd09097d477da725b161a4066f
Anjanesh Lekshminarayanan
Anjanesh Lekshminarayanan
Md. Habibur Rahman Talukder Shamim
CCST