1
저는 C# 응용 프로그램에서 S3 서버로 업로드 속도를 다소 높였지만 최대한 최대 크기는 각각 최대 100KB/s의 동시 스트림 2 개입니다. 브라우저에서 최대 1.0 MB/s를 업로드 할 수 있다고 생각하면 좌절감을 느낄 것입니다. 다음은 별도의 스레드에서 호출되는 UploadPartRequest를 사용하는 업로드 코드입니다.Amazon S3 .NET SDK는 2 스트림으로만 업로드 할 수 있습니다.
List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
List<Thread> uploadThreads = new List<Thread>();
InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest
{
BucketName = BucketName,
Key = result
};
InitiateMultipartUploadResponse initResponse = _S3client.InitiateMultipartUpload(initiateRequest);
_curContentLength = new FileInfo(pathToResult + result).Length;
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
long filePosition = 0;
for (int i = 1; filePosition < _curContentLength; i++)
{
if (filePosition + partSize > _curContentLength)
{
partSize = _curContentLength - filePosition;
}
UploadPartRequest uploadRequest = new UploadPartRequest
{
BucketName = BucketName,
UploadId = initResponse.UploadId,
PartNumber = i,
PartSize = partSize,
FilePosition = filePosition,
Key = result,
FilePath = (pathToResult + result)
};
uploadRequest.StreamTransferProgress += uploadFileProgressCallback;
// Upload part and add response to our list.
Thread t = new Thread(() => uploadResponses.Add(_S3client.UploadPart(uploadRequest)));
t.Start();
uploadThreads.Add(t);
filePosition += partSize;
}
foreach (var uploadThread in uploadThreads)
{
uploadThread.Join();
}
// Step 3: complete.
CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
{
BucketName = BucketName,
UploadId = initResponse.UploadId,
Key = result
//,PartETags = new List<PartETag>(uploadResponses)
};
completeRequest.AddPartETags(uploadResponses);
_S3client.CompleteMultipartUpload(completeRequest);
_systemEnable = true;
WriteLineToLog("Успешно залил ролик на S3!", intId);
break;
}
코드에 문제가있다거나 200 이하/S보다 큰 속도로 C#을 함께 S3에 업로드하는 것은 불가능 : Nevetherless, S3는 두 스레드가 동시에 업로드 할 수 있도록? ks스!
는 : 완벽하게 작동합니다. 대단히 감사합니다. –