Hi there,
For larger files I use the following multipart upload sequence:
- Instantiate a multipart upload session on my server by contacting Tigris
- Generate a series of presigned PUT urls with the aquired uploadId and partNumber
- Use the presigned urls in my client to upload the file in parts
- Complete the session on the server with the corresponding uploadId en ETags
However, I’m stuck in step 2:
Using the generated multipart presigned url
https://fly.storage.tigris.dev/test.sessions.pinggg.cloud/VpfJdEMNek7Deo30UehQB3LTfVnpPCyYgbaTsM7ee1jU/shares/1.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=tid_mNpmYFuMLHfstgsbJEnjDXQLjRSgqXlznLCJdlY_ZIhereWHco%2F20250110%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250110T150748Z&X-Amz-Expires=15&X-Amz-SignedHeaders=host&partNumber=3&uploadId=33f9ef79-4d96-971e-5ef1-47ba429803f2&X-Amz-Signature=ff1fdc841207d84f6bb34cbe7018e0d552b6142ef64fdfd46b973bb156e454a4
Tigris returns:
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<Resource>/test.sessions.pinggg.cloud/VpfJdEMNek7Deo30UehQB3LTfVnpPCyYgbaTsM7ee1jU/shares/1.pdf</Resource>
<RequestId>1736521675364427029</RequestId>
<Key>VpfJdEMNek7Deo30UehQB3LTfVnpPCyYgbaTsM7ee1jU/shares/1.pdf</Key>
<BucketName>test.sessions.pinggg.cloud</BucketName>
</Error>
I don’t understand what I’m doing wrong here. The signature logic (without the uploadId and partNumber) works perfectly for single presigned uploads. The only difference is that the multipart version includes uploadId and partNumber…
Is Tigris expecting a different structure for multipart presigned urls?