Issues with Digital Oceans Spaces presigned url with content type and ACL public-read
So I’m building this platform that will allow file uploads and I will be using Digital Oceans Spaces because it’s more affordable for my project. I encountered 2 problems so far when uploading files with presigned url. One is independent from the other. Here’s the code that generates the url:
$spaces = \Storage::disk('spaces'); $client = $spaces->getDriver()->getAdapter()->getClient(); $expiry = "+60 minutes"; $filename = time() .'.jpeg'; $command = $client->getCommand('PutObject', [ 'Bucket' => 'jgb', 'Key' => "images/$filename", 'ACL' => 'public-read', 'ContentType' => 'application/octet-stream', ]); $request = $client->createPresignedRequest($command, $expiry); return (string) $request->getUri();
and it works fine for file uploads using Postman except that I’m getting 2 problems:
- I can’t get the content type for files for the files and I get a weird type such as
when testing with Postman.
- I am getting “SignatureDoesNotMatch” error when when presigned url is generated with ACL set to “public-read” to allow access to everyone.
I’ve googled around and couldn’t find anything related to that. I’m thinking maybe Digital Ocean Spaces just lacks some of the features of S3.
Any help is welcome. Thanks!