public async Task <IUploadRequest> StartUploadFileAsync(IBinaryContent fileContent, int chunkSize = DEFAULT_UPLOAD_CHUNK_SIZE, long?replaceVideoId = null) { if (!fileContent.Data.CanRead) { throw new ArgumentException("fileContent should be readable"); } if (fileContent.Data.CanSeek && fileContent.Data.Position > 0) { fileContent.Data.Position = 0; } UploadTicket ticket = replaceVideoId.HasValue ? await GetReplaceVideoUploadTicketAsync(replaceVideoId.Value) : await GetUploadTicketAsync(); var uploadRequest = new UploadRequest { Ticket = ticket, File = fileContent, ChunkSize = chunkSize }; VerifyUploadResponse uploadStatus = await ContinueUploadFileAsync(uploadRequest); return(uploadRequest); }
public async Task <IUploadRequest> StartUploadFileAsync(IBinaryContent fileContent, int chunkSize = DEFAULT_UPLOAD_CHUNK_SIZE) { if (!fileContent.Data.CanRead) { throw new ArgumentException("fileContent should be readable"); } if (fileContent.Data.CanSeek && fileContent.Data.Position > 0) { fileContent.Data.Position = 0; } UploadTicket ticket = await GetUploadTicketAsync(); var uploadRequest = new UploadRequest { Ticket = ticket, File = fileContent, ChunkSize = chunkSize }; VerifyUploadResponse uploadStatus = await ContinueUploadFileAsync(uploadRequest); uploadRequest.BytesWritten = uploadStatus.BytesWritten; return(uploadRequest); }
/// <summary> /// Verify upload file part asynchronously /// </summary> /// <param name="uploadRequest">UploadRequest</param> /// <returns>Verification reponse</returns> private async Task <VerifyUploadResponse> VerifyUploadFileAsync(IUploadRequest uploadRequest) { try { var request = await GenerateFileStreamRequest(uploadRequest.File, uploadRequest.Ticket, verifyOnly : true) .ConfigureAwait(false); var response = await request.ExecuteRequestAsync().ConfigureAwait(false); var verify = new VerifyUploadResponse(); CheckStatusCodeError(uploadRequest, response, "Error verifying file upload.", (HttpStatusCode)308); // ReSharper disable once ConvertIfStatementToSwitchStatement if (response.StatusCode == HttpStatusCode.OK) { verify.BytesWritten = uploadRequest.FileLength; verify.Status = UploadStatusEnum.Completed; } else if (response.StatusCode == (HttpStatusCode)308) { verify.Status = UploadStatusEnum.InProgress; if (!response.Headers.Contains("Range")) { return(verify); } var match = RangeRegex.Match(response.Headers.GetValues("Range").First()); // ReSharper disable once InvertIf if (match.Success && long.TryParse(match.Groups["start"].Value, out var startIndex) && long.TryParse(match.Groups["end"].Value, out var endIndex)) { verify.BytesWritten = endIndex - startIndex; uploadRequest.BytesWritten = verify.BytesWritten; if (verify.BytesWritten == uploadRequest.FileLength) { verify.Status = UploadStatusEnum.Completed; } } } else { verify.Status = UploadStatusEnum.NotFound; } return(verify); } catch (Exception ex) { if (ex is VimeoApiException) { throw; } throw new VimeoUploadException("Error verifying file upload.", uploadRequest, ex); } }
public async Task <VerifyUploadResponse> VerifyUploadFileAsync(IUploadRequest uploadRequest) { try { IApiRequest request = await GenerateFileStreamRequest(uploadRequest.File, uploadRequest.Ticket, verifyOnly : true); IRestResponse response = await request.ExecuteRequestAsync(); var verify = new VerifyUploadResponse(); CheckStatusCodeError(uploadRequest, response, "Error verifying file upload.", (HttpStatusCode)308); if (response.StatusCode == HttpStatusCode.OK) { verify.BytesWritten = uploadRequest.FileLength; verify.Status = UploadStatusEnum.Completed; } else if (response.StatusCode == (HttpStatusCode)308) { verify.Status = UploadStatusEnum.InProgress; int startIndex = 0; int endIndex = 0; Parameter rangeHeader = response.Headers.FirstOrDefault(h => string.Compare(h.Name, "Range", true) == 0); if (rangeHeader != null && rangeHeader.Value != null) { Match match = _rangeRegex.Match(rangeHeader.Value as string); if (match.Success && int.TryParse(match.Groups["start"].Value, out startIndex) && int.TryParse(match.Groups["end"].Value, out endIndex)) { verify.BytesWritten = endIndex - startIndex; if (verify.BytesWritten == uploadRequest.FileLength) { verify.Status = UploadStatusEnum.Completed; } } } } else { verify.Status = UploadStatusEnum.NotFound; } return(verify); } catch (Exception ex) { if (ex is VimeoApiException) { throw; } throw new VimeoUploadException("Error verifying file upload.", uploadRequest, ex); } }
public async Task <IUploadRequest> UploadEntireFileAsync(IBinaryContent fileContent, int chunkSize = DEFAULT_UPLOAD_CHUNK_SIZE, long?replaceVideoId = null) { IUploadRequest uploadRequest = await StartUploadFileAsync(fileContent, chunkSize, replaceVideoId); VerifyUploadResponse uploadStatus = null; while (!uploadRequest.IsVerifiedComplete) { uploadStatus = await ContinueUploadFileAsync(uploadRequest); if (uploadRequest.AllBytesWritten) { // We presumably wrote all the bytes in the file, so verify with Vimeo that it // is completed uploadStatus = await VerifyUploadFileAsync(uploadRequest); if (uploadStatus.Status == UploadStatusEnum.Completed) { // If completed, mark file as complete await CompleteFileUploadAsync(uploadRequest); uploadRequest.IsVerifiedComplete = true; } else if (uploadStatus.BytesWritten == uploadRequest.FileLength) { // Supposedly all bytes are written, but Vimeo doesn't think so, so just // bail out throw new VimeoUploadException( string.Format( "Vimeo failed to mark file as completed, Bytes Written: {0:N0}, Expected: {1:N0}.", uploadStatus.BytesWritten), uploadRequest); } } } return(uploadRequest); }