AWS Multi-Part Upload错误:您提供的XML格式不正确或未针对我们发布的架构进行验证

Rus*_*960 2 c# amazon-s3 amazon-web-services

我使用了来自亚马逊的示例代码,它似乎可以正常运行,但是失败并显示以下错误:

您提供的XML格式不正确或未针对我们发布的架构进行验证

我认为,尽管在文档(http://docs.aws.amazon.com/AmazonS3/latest/dev/LLuploadFileDotNet.html)中已注释掉,但仍需要ETags 。我一直在努力建设这个。

代码://列表以存储上载部分的响应。列表uploadResponses = new List();

    // 1. Initialize.
    InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest
    {
        BucketName = bucketName,
        Key = keyName
    };

    InitiateMultipartUploadResponse initResponse = s3Client.InitiateMultipartUpload(initiateRequest);

    // 2. Upload Parts.
    long contentLength = new FileInfo(fileName).Length;
    long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB

    try
    {
        long filePosition = 0;
        for (int i = 1; filePosition < contentLength; i++)
        {

            // Create request to upload a part.
            UploadPartRequest uploadRequest = new UploadPartRequest
            {
                BucketName = bucketName,
                Key = keyName,
                UploadId = initResponse.UploadId,
                PartNumber = i,
                PartSize = partSize,
                FilePosition = filePosition,
                FilePath = fileName
            };

            // Upload part and add response to our list.
            uploadResponses.Add(s3Client.UploadPart(uploadRequest));
            filePosition += partSize;
        }

        // Step 3: complete.
        CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
        {
            BucketName = bucketName,
            Key = keyName,
            UploadId = initResponse.UploadId
        };

        CompleteMultipartUploadResponse completeUploadResponse =
          s3Client.CompleteMultipartUpload(completeRequest);

        return "Complete";
Run Code Online (Sandbox Code Playgroud)

Rus*_*960 5

发现了一个问题,尽管示例代码未使用PartETag,但这是必需的。我在UploadPartResponse的定义下添加了以下内容:

List<PartETag> partETags = new List<PartETag>();
Run Code Online (Sandbox Code Playgroud)

然后在uploadResponses.Add部分代码之后添加以下内容:

PartETag petag = new PartETag(s3Client.UploadPart(uploadRequest).PartNumber, s3Client.UploadPart(uploadRequest).ETag);
partETags.Add(petag);
Run Code Online (Sandbox Code Playgroud)

最后将CompleteMultipartUploadRequest修改为以下代码:

// Step 3: complete.
CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
{
    BucketName = bucketName,
    Key = fileTest, 
    UploadId = initResponse.UploadId,
    PartETags = partETags
};
Run Code Online (Sandbox Code Playgroud)