Я пытаюсь загрузить большой файл на AWS S3 . Итак, в проекте, над которым я работаю, мы отправляем большие файлы в виде фрагментированного процесса и следуем нижеприведенному подходу для загрузки каждой части. И когда мы получим последнюю часть, завершите загрузку и отправьте файл url.
public UploadPartResponse UploadChunk(Stream stream, string fileName, string uploadId, List<PartETag> eTags, int partNumber, bool lastPart)
{
stream.Position = 0; // Throwing Exceptions
//Step 1: build and send a multi upload request
if (partNumber == 1)
{
var initiateRequest = new InitiateMultipartUploadRequest
{
BucketName = _settings.Bucket,
Key = fileName
};
var initResponse = _s3Client.InitiateMultipartUpload(initiateRequest);
uploadId = initResponse.UploadId;
}
//Step 2: upload each chunk (this is run for every chunk unlike the other steps which are run once)
var uploadRequest = new UploadPartRequest
{
BucketName = _settings.Bucket,
Key = fileName,
UploadId = uploadId,
PartNumber = partNumber,
InputStream = stream,
IsLastPart = lastPart,
PartSize = stream.Length // Throwing Exceptions
};
var response = _s3Client.UploadPart(uploadRequest);
//Step 3: build and send the multipart complete request
if (lastPart)
{
eTags.Add(new PartETag
{
PartNumber = partNumber,
ETag = response.ETag
});
var completeRequest = new CompleteMultipartUploadRequest
{
BucketName = _settings.Bucket,
Key = fileName,
UploadId = uploadId,
PartETags = eTags
};
try
{
_s3Client.CompleteMultipartUpload(completeRequest);
}
catch
{
//do some logging and return null response
return null;
}
}
response.ResponseMetadata.Metadata["uploadid"] = uploadRequest.UploadId;
return response;
}
Сначала я пытался отправить 1MB порций данных за один раз в службу WCF. Но Multipart API не поддерживает данные детали менее чем 5MB , за исключением последней части. Так что я должен отправить 5MB данных для каждого чанка. В результате я увидел, что это замедляет процесс полной загрузки на моем локальном компьютере.
Замедляется ли при отправке 5MB фрагментированных данных в каждом запросе, а не 1MB фрагментированных данных? Или это хорошо, чтобы отправить больше данных в одном запросе и будет быстрее, когда я буду размещать службу WCF?
Любая помощь будет принята с благодарностью. Заранее спасибо.