Reputation: 1
I am trying to generate multiple presigned URLs for a multipart upload in AWS S3 using .NET Framework 4.8 and AWS SDK v3.3. I initiated a multipart upload and obtained an UploadId, then generated presigned URLs for each part by adding UploadId and PartNumber as parameters in GetPreSignedUrlRequest. However, when I use these presigned URLs to upload parts via HTTP PUT, the uploads are not being recognized as parts of a multipart upload. Instead, each upload appears to overwrite the previous one, as if the entire file is being uploaded each time rather than separate parts.
Here is the snippet
var presignedRequest = new GetPreSignedUrlRequest
{
BucketName = bucketName,
Key = objectKey,
Verb = HttpVerb.PUT,
Expires = DateTime.UtcNow.AddHours(1)
};
presignedRequest.Parameters.Add("uploadId", uploadId);
presignedRequest.Parameters.Add("partNumber", partNumber.ToString());
string presignedUrl = s3Client.GetPreSignedURL(presignedRequest);
Upvotes: -1
Views: 9
Reputation: 73
The issue is with how you add the parameters for the multipart upload. In S3 V3 SDK, you must use query parameters instead of regular ones.
// First initiate the multipart upload
var initiateRequest = new InitiateMultipartUploadRequest
{
BucketName = bucketName,
Key = objectKey
};
var initiateResponse = await s3Client.InitiateMultipartUploadAsync(initiateRequest);
string uploadId = initiateResponse.UploadId;
// Generate presigned URLs for each part
var presignedUrls = new List<string>();
for (int partNumber = 1; partNumber <= numberOfParts; partNumber++)
{
var presignedRequest = new GetPreSignedUrlRequest
{
BucketName = bucketName,
Key = objectKey,
Verb = HttpVerb.PUT,
Expires = DateTime.UtcNow.AddHours(1)
};
// Add query parameters correctly
presignedRequest.AddQueryParameter("partNumber", partNumber.ToString());
presignedRequest.AddQueryParameter("uploadId", uploadId);
string presignedUrl = s3Client.GetPreSignedURL(presignedRequest);
presignedUrls.Add(presignedUrl);
}
return presignedUrls;
Please note: I did not consider the error handling
Upvotes: 0