soto: DeleteObject command giving NotImplemented error
Describe the bug I have an S3 compatible bucket in DigitalOcean Storage which I can access and use with other tools like Cyberduck. I implemented upload and deletion of an object using soto in my Vapor service. The problem I have is that whereas the PutObject works fine, the DeleteObject is giving me an error.
To Reproduce Steps to reproduce the behavior:
- Create a bucket in DigitalOcean Storage
- Upload a file
- Try to delete the file
Expected behavior The file is deleted
Actual result
The request fails with Unhandled error, code: notImplemented
My guess is that there is some header in the request that shouldn’t be there and it can’t process. What bothers me is that using the same S3 bucket with other SDKs or even with a direct cURL works fine so I guess it must be something related to soto 🤔
Setup (please complete the following information):
- OS: MacOS 12.3.1
- Version of soto: 6.0.0
- Authentication mechanism: hard-coded credentials
Additional context I ran the command with the logging middleware:
Request:
DeleteObject
DELETE https://region.digitaloceanspaces.com/bucket/file.txt?x-id=DeleteObject
Headers: [
user-agent : Soto/6.0
content-type : application/octet-stream
]
Body: empty
Response:
Status : 501
Headers: [
content-length : 193
x-amz-request-id : tx00000000000000805c1d1-0062bf3992-51f730ea-fra1b
accept-ranges : bytes
content-type : application/xml
date : Fri, 01 Jul 2022 18:14:42 GMT
cache-control : max-age=60
strict-transport-security : max-age=15552000; includeSubDomains; preload
]
Body:
<Error><Code>NotImplemented</Code><RequestId>tx00000000000000805c1d1-0062bf3992-51f730ea-fra1b</RequestId><HostId>redacted-host-id</HostId></Error>
The code I’m using is pretty simple:
let deleteObjectRequest = S3.DeleteObjectRequest(
bucket: "bucket",
key: "file.jpg"
)
_ = try await s3.deleteObject(deleteObjectRequest)
and doing the following cURL works fine:
curl -X DELETE \
-H "user-agent: Soto/6.0" \
-H "content-type: application/octet-stream" \
-H "host: region.digitaloceanspaces.com" \
-H "x-amz-date: 20220701T173944Z" \
-H "x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" \
-H "Authorization: AWS4-HMAC-SHA256 Credential=REDACTED" \
"https://region.digitaloceanspaces.com/bucket/file.txt?x-id=DeleteObject"
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Reactions: 1
- Comments: 16 (9 by maintainers)
Sure thing 👍 Thanks for your help!
I’m currently removing the content-type header as it is a discrepancy between the aws-cli and Soto. I guess you can verify once that is committed