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)); }
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(); } } }
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); }
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); }
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); }