コード例 #1
0
        public static StorageId ToStorageId(this ForgeEntity entity)
        {
            if (entity.Type != ForgeEntityType.StorageObject)
            {
                throw new InvalidOperationException($"{entity.Type} is an not a StorageObject");
            }

            return(StorageId.Parse(entity.Id));
        }
コード例 #2
0
        public async Task <UploadResult> Upload(FileInfo file, ForgeEntity storage)
        {
            var objectApi = NewForgeApi <ObjectsApi>();

            var storageId = storage.ToStorageId();

            var bucketKey          = HttpUtility.UrlEncode(storageId.Bucket);
            var objectName         = HttpUtility.UrlEncode(storageId.Key);
            var contentDisposition = file.GetFileContentDisposition().ToString();
            var sessionId          = Guid.NewGuid().ToString();

            var chunks = await file.GetContentChunks();

            var uploadTasks = new List <Task <ApiResponse <dynamic> > >();

            try
            {
                foreach (var chunk in chunks)
                {
                    uploadTasks.Add(Task.Run(() =>
                    {
                        Debug.Write($"Upload chunk, {chunk.Range}");

                        var contentLength = (int)chunk.Content.Length;
                        var contentRange  = chunk.Range;
                        var body          = chunk.Content;

                        return(objectApi.UploadChunkAsyncWithHttpInfo(bucketKey, objectName, contentLength, contentRange, sessionId, body, contentDisposition));
                    }));
                }

                Task.WaitAll(uploadTasks.ToArray());

                var successTask = uploadTasks.Single(t => t.Result.StatusCode == 200);

                return(JsonConvert.DeserializeObject <UploadResult>(JsonConvert.SerializeObject(successTask.Result.Data)));
            }
            finally
            {
                foreach (var chunk in chunks)
                {
                    chunk.Dispose();
                }
            }
        }
コード例 #3
0
        public async Task <ForgeEntity> FindFolderByName(string parentFolderId, string folderName)
        {
            ForgeEntity entity = null;

            var foldersApi = NewForgeApi <FoldersApi>();

            dynamic folders = await foldersApi.GetFolderContentsAsync(Configuration.ForgeBimProjectId, parentFolderId, new string[] { "folders" }.ToList());

            (string name, string id)folder = ForgeFolderJson.SearchFolders(folders, folderName);

            if (!string.IsNullOrWhiteSpace(folder.id))
            {
                entity = new ForgeEntity
                {
                    Type = ForgeEntityType.Folder,
                    Id   = folder.id,
                    Name = folder.name
                };
            }

            return(entity);
        }
コード例 #4
0
        public async Task <ForgeEntity> CreateOssStorage(string folderId, string storageName)
        {
            ForgeEntity entity = null;

            var projectApi = NewForgeApi <ProjectsApi>();

            var storageObject = ForgeStorageJson.CreateStorage(storageName, folderId);

            var resp = await projectApi.PostStorageAsyncWithHttpInfo(Configuration.ForgeBimProjectId, storageObject);

            if (resp.StatusCode == 201)
            {
                entity = new ForgeEntity
                {
                    Type = ForgeEntityType.StorageObject,
                    Id   = resp.Data.data.id,
                    Name = storageName
                };
            }

            return(entity);
        }
コード例 #5
0
        public async Task <ForgeEntity> CreateFolder(string parentFolderId, string folderName)
        {
            ForgeEntity entity = null;

            var foldersApi = NewForgeApi <FoldersApi>();

            var folder = ForgeFolderJson.CreateFolder(folderName, parentFolderId);

            var response = await foldersApi.PostFolderAsyncWithHttpInfo(Configuration.ForgeBimProjectId, folder);

            if (response.StatusCode == 201)
            {
                var newFolderLocation = new Uri(response.LocationHeader());

                entity = new ForgeEntity
                {
                    Type = ForgeEntityType.Folder,
                    Id   = newFolderLocation.Segments.Last(),
                    Name = folderName
                };
            }

            return(entity);
        }