/// <summary> /// Initializes a new instance of the FileDetails class. /// </summary> public StreamLoaderResult(StreamLoadStatus status, StreamMetadata streamMeta, string contentType, Uri cloudLocation, Stream fileStream) { Status = status; Metadata = streamMeta; ContentType = contentType; //MimeTypes.GetMimeTypeForFileExtension(Path.GetExtension(FileName)); CloudLocation = cloudLocation; FileStream = fileStream; }
private static bool IsActionableRangeRequest(StreamMetadata metadata, IEnumerable<RangeRequest> rangeRequests, string ifRangeEntityTag) { bool isRangeRequest = RangeRequestHelpers.IsPartialOrMultipleRangeRequests(rangeRequests, metadata.Size.Value); return isRangeRequest && (string.IsNullOrWhiteSpace(ifRangeEntityTag) || string.Equals(metadata.ExpectedMD5, ifRangeEntityTag, StringComparison.OrdinalIgnoreCase)); }
private static long CalculateContentLength(StreamMetadata metadata, IEnumerable<RangeRequest> rangeRequests, string ifRangeEntityTag, string contentType, bool isMultipart) { if (IsActionableRangeRequest(metadata, rangeRequests, ifRangeEntityTag)) { //sum the content length of each request, taking special care when we support multipart long length = rangeRequests.Sum(rangeRequest => rangeRequest.End - rangeRequest.Start + 1 + //length of our header, plus our intermediate header footer (line break) (isMultipart ? rangeRequest.GetMultipartIntermediateHeader(contentType).Length + Environment.NewLine.Length : 0)); //responseContentLength += 49 + HttpMethodNames.MULTIPART_BOUNDARY.Length + contentType.Length + rangeRequests[i].startRange.ToString().Length + rangeRequests[i].endRange.ToString().Length + downloadProperties.Attachment.Size.ToString().Length; //tack on the last intermediate header length if applicable return isMultipart ? length + _MultipartFooter.Length : length; } // not a Range request, or the requested Range entity ID does not match the current entity ID, so start a new download return metadata.Size.Value; }