Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 获取EntityTooSmall异常_Amazon Web Services_Azure_Amazon S3 - Fatal编程技术网

Amazon web services 获取EntityTooSmall异常

Amazon web services 获取EntityTooSmall异常,amazon-web-services,azure,amazon-s3,Amazon Web Services,Azure,Amazon S3,我正在尝试从Azure blob中下载数据块,然后尝试将相同的块上传到aws s3 bucket。 上载时,我收到“您建议的上载小于允许的最小大小”异常。我注意到一件事,在上传响应中,我得到了0个内容长度。我正在尝试的数据大小超过300MB。 有什么提示吗?这里可能出了什么问题? 下面是我的代码片段: var remainingLength = blob.Properties.Length; long startPosition = 0;

我正在尝试从Azure blob中下载数据块,然后尝试将相同的块上传到aws s3 bucket。 上载时,我收到
“您建议的上载小于允许的最小大小”
异常。我注意到一件事,在上传响应中,我得到了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);
var remainingLength=blob.Properties.Length;
长起始位置=0;
List uploadResponses=新列表();
int i=1;
string uploadId=string.Empty;
//步骤1:生成并发送多个上载请求
var initiateRequest=新的InitiateMultipartUploadRequest
{
BucketName=现有BucketName,
Key=“firstobj”
};
var initResponse=client.InitiateMultipartUpload(initiateRequest);
uploadId=initResponse.uploadId;
做
{
var blockSize=数学最小值(分段大小,剩余长度);
使用(var ms=new MemoryStream())
{
blob.DownloadRangeToStream(ms、startPosition、blockSize);
//步骤2:上载每个区块(这是针对每个区块运行的,与其他只运行一次的步骤不同)
var uploadRequest=新的UploadPartRequest
{
BucketName=现有BucketName,
Key=“firstobj”,
UploadId=UploadId,
零件号=i,
零件尺寸=毫秒长度,
输入流=毫秒
};
//上传部分并将响应添加到我们的列表中。
var temp=client.UploadPart(uploadRequest);
上传响应。添加(临时);
}
//步骤3:生成并发送多部分完成请求
if(块大小<分段大小)
{
var completeRequest=新的CompleteMultipartUploadRequest
{
BucketName=现有BucketName,
Key=“firstobj”,
UploadId=UploadId,
};
AddParteTag(上传响应);
client.CompleteMultipartUpload(completeRequest);
}
起始位置+=块大小;
剩余长度-=块大小;
i++;
}
而(剩余长度>0);

在我的头撞了很多次之后,我找到了解决办法。在第2步中,在将零件上传到AWS之前,我们应该将流位置设置为0

uploadRequest.InputStream.Position = 0;

您试图在S3中上载的段大小/块大小是多少?@GauravMantri其50 MBOn代码中哪一行出现错误?@GauravMantri client.CompleteMultipartUpload(completeRequest);抛出错误
PartSize=ms.Length
?这似乎不对。这看起来应该是
PartSize=blockSize
,不是吗?