Import ConstructImportPartsList(long? volumeSize, DateTime urlExpiration)
{
var imageFilename = Path.GetFileName(ImageFilePath);
var imageFileinfo = new FileInfo(ImageFilePath);
var diskImageSize = imageFileinfo.Length;
var partCount = (int)Math.Ceiling((double)diskImageSize / DefaultPartSize);
var parts = new ImageFileParts { Count = partCount };
var partKeyPrefix = string.Format(CultureInfo.InvariantCulture,
"{0}/{1}.",
ArtifactsKeyPrefix,
imageFilename);
long partStartOffset = 0;
for (var i = 0; i < partCount; i++)
{
var partEndOffset = partStartOffset + DefaultPartSize - 1;
if (partEndOffset >= diskImageSize)
partEndOffset = diskImageSize - 1;
var partKey = string.Concat(partKeyPrefix, PartSuffix, i);
var part = new ImageFilePart
{
Index = i,
ByteRange = new ImageFilePartByteRange { Start = partStartOffset, End = partEndOffset },
Key = partKey,
HeadUrl = S3Client.GeneratePreSignedURL(
BucketName,
partKey,
urlExpiration,
new Dictionary<string, object> { { "Verb", "HEAD" } }),
GetUrl = S3Client.GeneratePreSignedURL(
BucketName,
partKey,
urlExpiration,
new Dictionary<string, object> { { "Verb", "GET" } }),
DeleteUrl = S3Client.GeneratePreSignedURL(
BucketName,
partKey,
urlExpiration,
new Dictionary<string, object> { { "Verb", "DELETE" } })
};
parts.PartInstances.Add(part);
partStartOffset += DefaultPartSize;
}
return new Import
{
Size = diskImageSize,
VolumeSize = VolumeSizeFor(diskImageSize, volumeSize),
PartsList = parts
};
}