Да, я получил ответ, я попробовал его с помощью многоадресной рассылки, и он работает нормально, вот мое решение
Вот мой класс
public class CustomAmazon
{
public string tourName { get; set; }
public string driveName { get; set; }
public string tourID { get; set; }
public string driveID { get; set; }
public string key { get; set; }
public string bucketName { get; set; }
public string cloudFrontVideoUrl { get; set; }
public string amazonS3VideoUrl { get; set; }
public string filePath { get; set; }
}
и вот мое решение
Я просто вызываю метод ниже, чтобы загрузить большой видеофайл после подключения учетных данных
/// <summary>
/// Method used for DFI (website or API) users to upload a file on Amazon S3 storage
/// </summary>
/// <param name="customAmazon"></param>
/// <returns>CustomAmazon class object </returns>
public CustomAmazon UploadFiletoAmazonS3Storage(CustomAmazon customAmazon)
{
using (client = new AmazonS3Client(ReadConfig.AWSAccessKeyId, ReadConfig.AWSSecretKey, RegionEndpoint.USEast1))
{
Console.WriteLine("Writing an object");
WritingAnLargeObject(customAmazon);
}
return customAmazon;
}
public static string WritingAnLargeObject(CustomAmazon customAmazon)
{
// List to store upload part responses.
List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
string fileName = string.Empty;
// Giving custom filename to original file
if (!string.IsNullOrEmpty(customAmazon.tourID) && (!string.IsNullOrEmpty(customAmazon.driveID)))
{
fileName = customAmazon.tourID + "/" + customAmazon.driveID + "/" + Guid.NewGuid() + "___" + Regex.Replace(Path.GetFileName(customAmazon.filePath), @"\s", "");
}
else
{
fileName = Guid.NewGuid() + "___" + Regex.Replace(Path.GetFileName(customAmazon.filePath), @"\s", "");
}
// 1. Initialize MultipartUploadRequest.
InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest
{
BucketName = customAmazon.bucketName,
Key = fileName,
ContentType = "video/mov",
CannedACL = S3CannedACL.PublicRead
};
InitiateMultipartUploadResponse initResponse =
client.InitiateMultipartUpload(initiateRequest);
// 2. Upload video in small Parts of 5 MB.
long contentLength = new FileInfo(customAmazon.filePath).Length;
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
try
{
long filePosition = 0;
for (int index = 1; filePosition < contentLength; index++)
{
UploadPartRequest uploadRequest = new UploadPartRequest
{
BucketName = customAmazon.bucketName,
Key = fileName,
UploadId = initResponse.UploadId,
PartNumber = index,
PartSize = partSize,
FilePosition = filePosition,
FilePath = customAmazon.filePath
};
// Upload part and add response to our list.
uploadResponses.Add(client.UploadPart(uploadRequest));
filePosition += partSize;
}
// Step 3: complete.
CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
{
BucketName = customAmazon.bucketName,
Key = fileName,
UploadId = initResponse.UploadId,
//PartETags = new List<PartETag>(uploadResponses)
};
completeRequest.AddPartETags(uploadResponses);
customAmazon.key = fileName;
CompleteMultipartUploadResponse completeUploadResponse = client.CompleteMultipartUpload(completeRequest);
customAmazon.cloudFrontVideoUrl = customAmazon.cloudFrontVideoUrl + fileName;
customAmazon.amazonS3VideoUrl = ReadConfig.AWSStorageUrl + fileName;
}
catch (Exception exception)
{
Logger.Write(exception.Message);
Console.WriteLine("Exception occurred: {0}", exception.Message);
AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
{
BucketName = customAmazon.bucketName,
Key = fileName,
UploadId = initResponse.UploadId
};
client.AbortMultipartUpload(abortMPURequest);
}
return fileName;
}
и, наконец, я загрузил видео в корзину S3