amazon-web-services - 获取 EntityTooSmall 异常

标签 amazon-web-services azure amazon-s3

我正在尝试从 Azure blob 中下载数据 block ,然后尝试将相同的 block 上传到 aws s3 存储桶。 上传时,我收到“您建议的上传大小小于允许的最小大小”异常。我注意到一件事,在上传响应中我得到的内容长度为 0。我尝试的数据大小超过 300MB。 有任何指示这里可能有什么问题吗? 下面是我的代码片段:

            var remainingLength = blob.Properties.Length;
            long startPosition = 0;
            List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
            int i = 1;
            string uploadId = string.Empty;

            //Step 1: build and send a multi upload request
            var initiateRequest = new InitiateMultipartUploadRequest
            {
                BucketName = existingBucketName,
                Key = "firstobj"
            };

            var initResponse = client.InitiateMultipartUpload(initiateRequest);
            uploadId = initResponse.UploadId;

            do
            {
                var blockSize = Math.Min(segmentSize, remainingLength);
                using (var ms = new MemoryStream())
                {
                    blob.DownloadRangeToStream(ms, startPosition, blockSize);

                    //Step 2: upload each chunk (this is run for every chunk unlike the other steps which are run once)
                    var uploadRequest = new UploadPartRequest
                    {
                        BucketName = existingBucketName,
                        Key = "firstobj",
                        UploadId = uploadId,
                        PartNumber = i,
                        PartSize = ms.Length,
                        InputStream = ms
                    };

                    // Upload part and add response to our list.
                    var temp = client.UploadPart(uploadRequest);
                    uploadResponses.Add(temp);
                }

                //Step 3: build and send the multipart complete request
                if (blockSize < segmentSize)
                {

                    var completeRequest = new CompleteMultipartUploadRequest
                    {
                        BucketName = existingBucketName,
                        Key = "firstobj",
                        UploadId = uploadId,
                    };

                    completeRequest.AddPartETags(uploadResponses);    
                    client.CompleteMultipartUpload(completeRequest);
                }

                startPosition += blockSize;
                remainingLength -= blockSize;
                i++;
            }
            while (remainingLength > 0);

最佳答案

经过一番努力之后,我找到了解决方案。在第 2 步中,在将部分上传到 AWS 之前,我们应该将流位置设置为 0。

uploadRequest.InputStream.Position = 0;

关于amazon-web-services - 获取 EntityTooSmall 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49195031/

相关文章:

elasticsearch - ElasticSearch-使用 “not modificable”文档的可审核解决方案?

amazon-s3 - 脱机先自动同步图像

amazon-web-services - S3 存储桶文件夹的子域

amazon-web-services - 我可以将 AWS CloudFormation 配置为在更新时不修改 DynamoDB 表的 ProvisionedThroughput 吗?

amazon-web-services - 如何使用 .ebextensions 将应用程序负载均衡器固定响应添加到 AWS Elastic Beanstalk

amazon-web-services - React Native 中的 AWS Appsync 401 和 403 错误

amazon-web-services - 将数据直接从Filebeats推送到AWS ES托管服务

node.js - 将 Bing Web 搜索 API 与 QnA 聊天机器人集成

sql-server - Azure SQL Server - 偶尔丢失连接

file - CakePHP 与 Azure Blob