1

パーツ サイズを 5MB に設定すると、AWS を使用してファイルをアップロードしようとしていますが、コードは正常に動作しますが、パーツ サイズを 1MB に変更しようとすると、例外が発生します。コードは次のとおりです。

            string strusername = "user1";       
            strlocalpath = "C:\\file1.zip";    
            string BUCKET_NAME = "bucket1";
            string filename = "file1.zip"
            string keypath = strusername + "/" + filename;
            string keyName = "123";
            string filePath = strlocalpath;
            // List to store upload part responses.
            List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();

            // 1. Initialize.
            InitiateMultipartUploadRequest initRequest =
                new InitiateMultipartUploadRequest()
                .WithBucketName(BUCKET_NAME)
                .WithKey(keyName);

            InitiateMultipartUploadResponse initResponse =
                s3Client.InitiateMultipartUpload(initRequest);

            // 2. Upload Parts.
            long contentLength = new FileInfo(filePath).Length;
            //Set Part size 
            long partSize = 1*1024*1024; // 5 MB

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

                    if (filePosition + partSize > contentLength)
                    {
                        partSize = contentLength - filePosition;
                    }
                    // Create request to upload a part.
                    UploadPartRequest uploadRequest = new UploadPartRequest()
                        .WithBucketName(BUCKET_NAME)
                        .WithKey(keyName)
                        .WithUploadId(initResponse.UploadId)
                        .WithPartNumber(i)
                        .WithPartSize(partSize)
                        .WithFilePosition(filePosition)
                        .WithFilePath(filePath)
                        .WithTimeout(60*60*60);

                    // Upload part and add response to our list.
                    uploadResponses.Add(s3Client.UploadPart(uploadRequest));

                    filePosition += partSize;



                    Console.WriteLine("\nTotal uploaded size = " + filePosition.ToString());
                }

                // Step 3: complete.
                CompleteMultipartUploadRequest compRequest =
                    new CompleteMultipartUploadRequest()
                    .WithBucketName(BUCKET_NAME)
                    .WithKey(keyName)
                    .WithUploadId(initResponse.UploadId)
                    .WithPartETags(uploadResponses);

                CompleteMultipartUploadResponse completeUploadResponse =
                    s3Client.CompleteMultipartUpload(compRequest);

            }
            catch (Exception exception)
            {
                Console.WriteLine("Exception occurred: {0}", exception.Message);
                s3Client.AbortMultipartUpload(new AbortMultipartUploadRequest()
                    .WithBucketName(BUCKET_NAME)
                    .WithKey(keyName)
                    .WithUploadId(initResponse.UploadId));
            }

例外は次のとおりです。

<Error>
<Code>EntityTooSmall</Code>
<Message>Your proposed upload is smaller than the minimum allowed size</Message>   
<ETag>d9c00192bcf6bf7412814a8fe0422b0c</ETag>
<MinSizeAllowed>5242880</MinSizeAllowed>
<ProposedSize>1048576</ProposedSize>
<RequestId>PBG04E031C012F34</RequestId>
<HostId>VEjvpkjuk89yS4xW6Bl/+NPpb3yxvbbe7ijjPmTrlXc7hnjj89kjkm</HostId> 
<PartNumber>1</PartNumber></Error>

ファイルを 1 MB または 2 MB のチャンクでアップロードしたいのですが、それは可能ですか?

ありがとう

4

3 に答える 3

2

サイズを間違えたようです。

S3 ドキュメント: アップロード部分

最後の部分を除いて、各部分のサイズは 5 MB 以上である必要があります。マルチパート アップロードの最後の部分にサイズ制限はありません。

いいえ、5MB 未満の部分を実行するように指定することはできません。マルチパートを実行する場合、最後の部分が最初/唯一の部分ではないと仮定して、最後の部分が 5MB 未満になることを自動的に許可します。


Glacier のドキュメント: Amazon の Initiate MultiPart Upload ドキュメントには次のように記載されています。

マルチパート アップロードを開始するときは、パート サイズをバイト数で指定します。パーツのサイズは、1048576 (1 MB)、2097152 (2 MB)、4194304 (4 MB)、8388608 (8 MB) などのように、メガバイト (1024 KB) に 2 の累乗を掛けたものでなければなりません。許容される最小のパーツ サイズは 1 MB、最大は 4 GB です。

あなたのコードにはlong partSize = 1*1024*1024、コメントが述べているように5MBではなく、上記のものが1048576あります。1 MB

また、同じリンクから、将来の参照または同じ問題に注意してください。

このアップロード ID を使用してアップロードするすべてのパーツは、最後のものを除き、同じサイズである必要があります。最後の 1 つは、同じサイズまたは小さいサイズにすることができます。たとえば、16.2 MB のファイルをアップロードするとします。4 MB のパーツ サイズでマルチパート アップロードを開始すると、それぞれ 4 MB の 4 つのパーツと 0.2 MB の 1 つのパーツがアップロードされます。

于 2013-10-28T13:14:30.497 に答える
0

簡単なルールがあります。ファイルが 5Mb 未満の場合は、一度にアップロードしてください。

于 2017-07-17T01:33:52.963 に答える