private async Task<IApiRequest> GenerateFileStreamRequest(IBinaryContent fileContent, UploadTicket ticket, long written = 0, int? chunkSize = null, bool verifyOnly = false) { if (ticket == null || string.IsNullOrWhiteSpace(ticket.ticket_id)) { throw new ArgumentException("Invalid upload ticket."); } if (fileContent.Data.Length > ticket.user.upload_quota.space.free) { throw new InvalidOperationException( "User does not have enough free space to upload this video. Remaining space: " + ticket.quota.free_space + "."); } IApiRequest request = _apiRequestFactory.GetApiRequest(); request.Method = Method.PUT; request.ExcludeAuthorizationHeader = true; request.Path = ticket.upload_link_secure; request.Headers.Add(Request.HeaderContentType, fileContent.ContentType); if (verifyOnly) { request.Headers.Add(Request.HeaderContentLength, "0"); request.Headers.Add(Request.HeaderContentRange, "bytes */*"); } else { if (chunkSize.HasValue) { long startIndex = fileContent.Data.CanSeek ? fileContent.Data.Position : written; long endIndex = Math.Min(startIndex + chunkSize.Value, fileContent.Data.Length); request.Headers.Add(Request.HeaderContentLength, (endIndex - startIndex).ToString()); request.Headers.Add(Request.HeaderContentRange, string.Format("bytes {0}-{1}/{2}", startIndex, endIndex, fileContent.Data.Length)); request.BinaryContent = await fileContent.ReadAsync(startIndex, endIndex); } else { request.Headers.Add(Request.HeaderContentLength, fileContent.Data.Length.ToString()); request.BinaryContent = await fileContent.ReadAllAsync(); } } return request; }
private IApiRequest GenerateCompleteUploadRequest(UploadTicket ticket) { IApiRequest request = _apiRequestFactory.GetApiRequest(AccessToken); request.Method = Method.DELETE; request.Path = ticket.complete_uri; return request; }