public async Task UploadBigFileInSession_ShouldUploadTheFile_OnlyIfCommitIsCalled() { long fileSize = 20000000; MemoryStream fileInMemoryStream = CreateFileInMemoryStream(fileSize); var remoteFileName = GetUniqueName("UploadSession"); var boxFileUploadSessionRequest = new BoxFileUploadSessionRequest() { FolderId = FolderId, FileName = remoteFileName, FileSize = fileSize }; BoxFileUploadSession boxFileUploadSession = await UserClient.FilesManager.CreateUploadSessionAsync(boxFileUploadSessionRequest); BoxSessionEndpoint boxSessionEndpoint = boxFileUploadSession.SessionEndpoints; var uploadPartUri = new Uri(boxSessionEndpoint.UploadPart); var commitUri = new Uri(boxSessionEndpoint.Commit); var listPartsUri = new Uri(boxSessionEndpoint.ListParts); var partSize = boxFileUploadSession.PartSize; long.TryParse(partSize, out var partSizeLong); var numberOfParts = GetNumberOfParts(fileSize, partSizeLong); await UploadPartsInSessionAsync(uploadPartUri, numberOfParts, partSizeLong, fileInMemoryStream, fileSize); // Assert file is not committed/uploaded to box yet Assert.IsFalse(await DoesFileExistInFolder(UserClient, FolderId, remoteFileName)); var allSessionParts = new List <BoxSessionPartInfo>(); var boxSessionParts = await UserClient.FilesManager.GetSessionUploadedPartsAsync(listPartsUri, null, null, true); foreach (var sessionPart in boxSessionParts.Entries) { allSessionParts.Add(sessionPart); } var sessionPartsForCommit = new BoxSessionParts() { Parts = allSessionParts }; var uploadedFile = await UserClient.FilesManager.CommitSessionAsync(commitUri, Helper.GetSha1Hash(fileInMemoryStream), sessionPartsForCommit); // Assert file is committed/uploaded to box after commit Assert.IsTrue(await DoesFileExistInFolder(UserClient, FolderId, remoteFileName)); await DeleteFile(uploadedFile.Id); }
public async Task UploadFileInSession_CommitSession_FilePresent() { long fileSize = 50000000; MemoryStream fileInMemoryStream = GetBigFileInMemoryStream(fileSize); string remoteFileName = "UploadedUsingSession-" + DateTime.Now.TimeOfDay; string parentFolderId = "0"; BoxFileUploadSessionRequest boxFileUploadSessionRequest = new BoxFileUploadSessionRequest() { FolderId = parentFolderId, FileName = remoteFileName, FileSize = fileSize }; // Create Upload Session BoxFileUploadSession boxFileUploadSession = await _client.FilesManager.CreateUploadSessionAsync(boxFileUploadSessionRequest); BoxSessionEndpoint boxSessionEndpoint = boxFileUploadSession.SessionEndpoints; Uri listPartsUri = new Uri(boxSessionEndpoint.ListParts); Uri uploadPartUri = new Uri(boxSessionEndpoint.UploadPart); Uri commitUri = new Uri(boxSessionEndpoint.Commit); string partSize = boxFileUploadSession.PartSize; long partSizeLong; long.TryParse(partSize, out partSizeLong); int numberOfParts = UploadUsingSessionInternal.GetNumberOfParts(fileSize, partSizeLong); // Upload parts in the session await UploadPartsInSessionAsync(uploadPartUri, numberOfParts, partSizeLong, fileInMemoryStream, fileSize); // Assert file is not committed/uploaded to box yet Assert.IsFalse(await DoesFileExistInFolder(parentFolderId, remoteFileName)); // Get upload parts (1 by 1) for Integration testing purposes List <BoxSessionPartInfo> allSessionParts = new List <BoxSessionPartInfo>(); // var boxSessionParts = await _client.FilesManager.GetSessionUploadedPartsAsync(listPartsUri, 0, 2, true); var boxSessionParts = await _client.FilesManager.GetSessionUploadedPartsAsync(listPartsUri, null, null, true); foreach (var sessionPart in boxSessionParts.Entries) { allSessionParts.Add(sessionPart); } /* w/o autopaging * var boxSessionParts = await _client.FilesManager.GetSessionUploadedPartsAsync(listPartsUri, 0, 1); * allSessionParts.AddRange(boxSessionParts.Entries); * * while (allSessionParts.Count < boxSessionParts.TotalCount) * { * boxSessionParts = await _client.FilesManager.GetSessionUploadedPartsAsync(listPartsUri, allSessionParts.Count, 1); * allSessionParts.AddRange(boxSessionParts.Entries); * } */ BoxSessionParts sessionPartsForCommit = new BoxSessionParts() { Parts = allSessionParts }; // Commit await _client.FilesManager.CommitSessionAsync(commitUri, Helper.GetSha1Hash(fileInMemoryStream), sessionPartsForCommit); // Assert file is committed/uploaded to box Assert.IsTrue(await DoesFileExistInFolder(parentFolderId, remoteFileName)); // Delete file string fileId = await GetFileId(parentFolderId, remoteFileName); if (!string.IsNullOrWhiteSpace(fileId)) { await _client.FilesManager.DeleteAsync(fileId); } // Assert file has been deleted from Box Assert.IsFalse(await DoesFileExistInFolder(parentFolderId, remoteFileName)); }
public async new Task <dynamic> CommitSessionAsync(Uri commitSessionUrl, string sha, BoxSessionParts sessionPartsInfo) { BoxRequest request = new BoxRequest(commitSessionUrl); request.Method = RequestMethod.Post; request.HttpHeaders.Add(Constants.RequestParameters.Digest, "sha=" + sha); request.Payload = _converter.Serialize(sessionPartsInfo); request.ContentType = Constants.RequestParameters.ContentTypeJson; var response = await ToResponseAsync <BoxFile>(request).ConfigureAwait(false); return(response.ResponseObject); }
private async Task <BoxFile> ChunkedUpload(string path, string fileName, string parentFolderId, long fileSize, BoxClient boxClient, string fileId = "", bool isNewVersion = false, bool idOnly = false) { using (var fileInMemoryStream = File.Open(path, FileMode.Open)) { if (!idOnly) { Reporter.WriteInformation($"File name: {fileName}"); } BoxFileUploadSession boxFileUploadSession; if (isNewVersion) { // TODO: Correct after SDK is fixed. boxClient.AddResourcePlugin <BoxFileManagerCommand>(); var command = boxClient.ResourcePlugins.Get <BoxFileManagerCommand>(); boxFileUploadSession = await command.CreateNewVersionUploadSessionAsync(fileId, fileSize); } else { var boxFileUploadSessionRequest = new BoxFileUploadSessionRequest() { FolderId = parentFolderId, FileName = fileName, FileSize = fileSize }; boxFileUploadSession = await boxClient.FilesManager.CreateUploadSessionAsync(boxFileUploadSessionRequest); } var completeFileSha = await Task.Run(() => { return(Box.V2.Utility.Helper.GetSha1Hash(fileInMemoryStream)); }); var boxSessionEndpoint = boxFileUploadSession.SessionEndpoints; var uploadPartUri = new Uri(boxSessionEndpoint.UploadPart); var commitUri = new Uri(boxSessionEndpoint.Commit); var partSize = boxFileUploadSession.PartSize; long partSizeLong; long.TryParse(partSize, out partSizeLong); var numberOfParts = this.GetUploadPartsCount(fileSize, partSizeLong); if (!idOnly) { Reporter.WriteInformation($"Processing {fileName}"); ProgressBar.UpdateProgress($"Processing ", 0, numberOfParts); } var boxSessionParts = await UploadPartsInSessionAsync(uploadPartUri, numberOfParts, partSizeLong, fileInMemoryStream, client : boxClient, fileSize : fileSize, idOnly : idOnly); BoxSessionParts sessionPartsForCommit = new BoxSessionParts() { Parts = boxSessionParts }; if (!idOnly) { Reporter.WriteInformation(""); Reporter.WriteInformation("Attempting to commit..."); } // const int retryCount = 5; // var retryInterval = boxSessionParts.Count() * 100; // Commit if (!string.IsNullOrEmpty(fileId)) { return(await boxClient.FilesManager.CommitFileVersionSessionAsync(commitUri, completeFileSha, sessionPartsForCommit)); } else { return(await boxClient.FilesManager.CommitSessionAsync(commitUri, completeFileSha, sessionPartsForCommit)); } } }