Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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));
                }
            }
        }