protected async Task <XrefTreeArgument> BuildDownloadURL(string userAccessToken, string projectId, string versionId) { VersionsApi versionApi = new VersionsApi(); versionApi.Configuration.AccessToken = userAccessToken; dynamic version = await versionApi.GetVersionAsync(projectId, versionId); dynamic versionItem = await versionApi.GetVersionItemAsync(projectId, versionId); string[] versionItemParams = ((string)version.data.relationships.storage.data.id).Split('/'); string[] bucketKeyParams = versionItemParams[versionItemParams.Length - 2].Split(':'); string bucketKey = bucketKeyParams[bucketKeyParams.Length - 1]; string objectName = versionItemParams[versionItemParams.Length - 1]; string downloadUrl = string.Format("https://developer.api.autodesk.com/oss/v2/buckets/{0}/objects/{1}", bucketKey, objectName); return(new XrefTreeArgument() { Url = downloadUrl, Verb = Verb.Get, Headers = new Dictionary <string, string>() { { "Authorization", "Bearer " + userAccessToken } } }); }
private async Task CreateItemVersion(string projectId, string folderId, string fileName, string storageId) { FoldersApi foldersApi = new FoldersApi(); var folderContents = await foldersApi.GetFolderContentsAsync(projectId, folderId); var folderData = new DynamicDictionaryItems(folderContents.data); string itemId = string.Empty; foreach (KeyValuePair <string, dynamic> item in folderData) { if (item.Value.attributes.displayName == fileName) { itemId = item.Value.id; // this means a file with same name is already there, so we'll create a new version } } if (string.IsNullOrWhiteSpace(itemId)) { // create a new item BaseAttributesExtensionObject baseAttribute = new BaseAttributesExtensionObject(projectId.StartsWith("a.") ? "items:autodesk.core:File" : "items:autodesk.bim360:File", "1.0"); CreateItemDataAttributes createItemAttributes = new CreateItemDataAttributes(fileName, baseAttribute); CreateItemDataRelationshipsTipData createItemRelationshipsTipData = new CreateItemDataRelationshipsTipData(CreateItemDataRelationshipsTipData.TypeEnum.Versions, CreateItemDataRelationshipsTipData.IdEnum._1); CreateItemDataRelationshipsTip createItemRelationshipsTip = new CreateItemDataRelationshipsTip(createItemRelationshipsTipData); StorageRelationshipsTargetData storageTargetData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, folderId); CreateStorageDataRelationshipsTarget createStorageRelationshipTarget = new CreateStorageDataRelationshipsTarget(storageTargetData); CreateItemDataRelationships createItemDataRelationhips = new CreateItemDataRelationships(createItemRelationshipsTip, createStorageRelationshipTarget); CreateItemData createItemData = new CreateItemData(CreateItemData.TypeEnum.Items, createItemAttributes, createItemDataRelationhips); BaseAttributesExtensionObject baseAttExtensionObj = new BaseAttributesExtensionObject(projectId.StartsWith("a.") ? "versions:autodesk.core:File" : "versions:autodesk.bim360:File", "1.0"); CreateStorageDataAttributes storageDataAtt = new CreateStorageDataAttributes(fileName, baseAttExtensionObj); CreateItemRelationshipsStorageData createItemRelationshipsStorageData = new CreateItemRelationshipsStorageData(CreateItemRelationshipsStorageData.TypeEnum.Objects, storageId); CreateItemRelationshipsStorage createItemRelationshipsStorage = new CreateItemRelationshipsStorage(createItemRelationshipsStorageData); CreateItemRelationships createItemRelationship = new CreateItemRelationships(createItemRelationshipsStorage); CreateItemIncluded includedVersion = new CreateItemIncluded(CreateItemIncluded.TypeEnum.Versions, CreateItemIncluded.IdEnum._1, storageDataAtt, createItemRelationship); CreateItem createItem = new CreateItem(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), createItemData, new List <CreateItemIncluded>() { includedVersion }); ItemsApi itemsApi = new ItemsApi(); var newItem = await itemsApi.PostItemAsync(projectId, createItem); } else { // create a new version BaseAttributesExtensionObject attExtensionObj = new BaseAttributesExtensionObject(projectId.StartsWith("a.") ? "versions:autodesk.core:File" : "versions:autodesk.bim360:File", "1.0"); CreateStorageDataAttributes storageDataAtt = new CreateStorageDataAttributes(fileName, attExtensionObj); CreateVersionDataRelationshipsItemData dataRelationshipsItemData = new CreateVersionDataRelationshipsItemData(CreateVersionDataRelationshipsItemData.TypeEnum.Items, itemId); CreateVersionDataRelationshipsItem dataRelationshipsItem = new CreateVersionDataRelationshipsItem(dataRelationshipsItemData); CreateItemRelationshipsStorageData itemRelationshipsStorageData = new CreateItemRelationshipsStorageData(CreateItemRelationshipsStorageData.TypeEnum.Objects, storageId); CreateItemRelationshipsStorage itemRelationshipsStorage = new CreateItemRelationshipsStorage(itemRelationshipsStorageData); CreateVersionDataRelationships dataRelationships = new CreateVersionDataRelationships(dataRelationshipsItem, itemRelationshipsStorage); CreateVersionData versionData = new CreateVersionData(CreateVersionData.TypeEnum.Versions, storageDataAtt, dataRelationships); CreateVersion newVersionData = new CreateVersion(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), versionData); VersionsApi versionsApis = new VersionsApi(); dynamic newVersion = await versionsApis.PostVersionAsync(projectId, newVersionData); } }
public async Task CreateIssues(string userId, string hubId, string projectId, string versionId, string contentRootPath, string host) { string bucketName = "revitdesigncheck" + DesignAutomation4Revit.NickName.ToLower(); var awsCredentials = new Amazon.Runtime.BasicAWSCredentials(Credentials.GetAppSetting("AWS_ACCESS_KEY"), Credentials.GetAppSetting("AWS_SECRET_KEY")); IAmazonS3 client = new AmazonS3Client(awsCredentials, Amazon.RegionEndpoint.USWest2); string resultFilename = versionId + ".txt"; // create AWS Bucket if (!await client.DoesS3BucketExistAsync(bucketName)) { return; } Uri downloadFromS3 = new Uri(client.GeneratePreSignedURL(bucketName, resultFilename, DateTime.Now.AddMinutes(10), null)); // ToDo: is there a better way? string results = Path.Combine(contentRootPath, resultFilename); var keys = await client.GetAllObjectKeysAsync(bucketName, null, null); if (!keys.Contains(resultFilename)) { return; // file is not there } await client.DownloadToFilePathAsync(bucketName, resultFilename, results, null); string contents = System.IO.File.ReadAllText(results); Credentials credentials = await Credentials.FromDatabaseAsync(userId); VersionsApi versionApi = new VersionsApi(); versionApi.Configuration.AccessToken = credentials.TokenInternal; dynamic versionItem = await versionApi.GetVersionItemAsync(projectId, versionId.Base64Decode()); string itemId = versionItem.data.id; int version = Int32.Parse(versionId.Split("_")[1].Base64Decode().Split("=")[1]); string title = string.Format("Column clash report for version {0}", version); string description = string.Format("<a href=\"http://{0}/issues/?urn={1}&id={2}\" target=\"_blank\">Click to view issues</a>", host, versionId, contents.Base64Encode()); // create issues BIM360Issues issues = new BIM360Issues(); string containerId = await issues.GetContainer(credentials.TokenInternal, hubId, projectId); await issues.CreateIssue(credentials.TokenInternal, containerId, itemId, version, title, description); // only delete if it completes System.IO.File.Delete(resultFilename); await client.DeleteObjectAsync(bucketName, resultFilename); }
public async Task CreateIssues(string userId, string hubId, string projectId, string versionId, string contentRootPath, string host) { string bucketName = "revitdesigncheck" + DesignAutomation4Revit.NickName.ToLower(); string resultFilename = versionId + ".txt"; //Here we retrieve de data uploaded to the bucket from Design Automation ObjectsApi objects = new ObjectsApi(); dynamic token = await Credentials.Get2LeggedTokenAsync(new Scope[] { Scope.DataRead }); objects.Configuration.AccessToken = token.access_token; string fileContents; try { dynamic objectDownload = objects.GetObject(bucketName, resultFilename); using (StreamReader reader = new StreamReader(objectDownload)) { fileContents = reader.ReadToEnd(); } } catch (Exception e) { //couldn't download the file return; } Credentials credentials = await Credentials.FromDatabaseAsync(userId); VersionsApi versionApi = new VersionsApi(); versionApi.Configuration.AccessToken = credentials.TokenInternal; dynamic versionItem = await versionApi.GetVersionItemAsync(projectId, versionId.Base64Decode()); string itemId = versionItem.data.id; int version = Int32.Parse(versionId.Split("_")[1].Base64Decode().Split("=")[1]); string title = string.Format("Column clash report for version {0}", version); string description = string.Format("<a href=\"http://{0}/issues/?urn={1}&id={2}\" target=\"_blank\">Click to view issues</a>", host, versionId, fileContents.Base64Encode()); // create issues BIM360Issues issues = new BIM360Issues(); string containerId = await issues.GetContainer(credentials.TokenInternal, hubId, projectId); await issues.CreateIssue(credentials.TokenInternal, containerId, itemId, version, title, description); // only delete if it completes System.IO.File.Delete(resultFilename); objects.DeleteObject(bucketName, resultFilename); }
public async Task PostProcessFile(string userId, string projectId, string itemId, string storageId, string fileName) { Credentials credentials = await Credentials.FromDatabaseAsync(userId); VersionsApi versionsApis = new VersionsApi(); versionsApis.Configuration.AccessToken = credentials.TokenInternal; CreateVersion newVersionData = new CreateVersion ( new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), new CreateVersionData ( CreateVersionData.TypeEnum.Versions, new CreateStorageDataAttributes ( fileName, new BaseAttributesExtensionObject ( "versions:autodesk.bim360:File", "1.0", new JsonApiLink(string.Empty), null ) ), new CreateVersionDataRelationships ( new CreateVersionDataRelationshipsItem ( new CreateVersionDataRelationshipsItemData ( CreateVersionDataRelationshipsItemData.TypeEnum.Items, itemId ) ), new CreateItemRelationshipsStorage ( new CreateItemRelationshipsStorageData ( CreateItemRelationshipsStorageData.TypeEnum.Objects, storageId ) ) ) ) ); dynamic newVersion = await versionsApis.PostVersionAsync(projectId, newVersionData); }
private async Task <dynamic> PreWorkNewVersion(string userAccessToken, string projectId, string versionId) { // get version VersionsApi versionApi = new VersionsApi(); versionApi.Configuration.AccessToken = userAccessToken; dynamic versionItem = await versionApi.GetVersionItemAsync(projectId, versionId); // get item ItemsApi itemApi = new ItemsApi(); itemApi.Configuration.AccessToken = userAccessToken; string itemId = versionItem.data.id; dynamic item = await itemApi.GetItemAsync(projectId, itemId); string folderId = item.data.relationships.parent.data.id; string fileName = item.data.attributes.displayName; // prepare storage ProjectsApi projectApi = new ProjectsApi(); projectApi.Configuration.AccessToken = userAccessToken; StorageRelationshipsTargetData storageRelData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, folderId); CreateStorageDataRelationshipsTarget storageTarget = new CreateStorageDataRelationshipsTarget(storageRelData); CreateStorageDataRelationships storageRel = new CreateStorageDataRelationships(storageTarget); BaseAttributesExtensionObject attributes = new BaseAttributesExtensionObject(string.Empty, string.Empty, new JsonApiLink(string.Empty), null); CreateStorageDataAttributes storageAtt = new CreateStorageDataAttributes(fileName, attributes); CreateStorageData storageData = new CreateStorageData(CreateStorageData.TypeEnum.Objects, storageAtt, storageRel); CreateStorage storage = new CreateStorage(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), storageData); dynamic storageCreated = await projectApi.PostStorageAsync(projectId, storage); string[] storageIdParams = ((string)storageCreated.data.id).Split('/'); string[] bucketKeyParams = storageIdParams[storageIdParams.Length - 2].Split(':'); string bucketKey = bucketKeyParams[bucketKeyParams.Length - 1]; string objectName = storageIdParams[storageIdParams.Length - 1]; string uploadUrl = string.Format("https://developer.api.autodesk.com/oss/v2/buckets/{0}/objects/{1}", bucketKey, objectName); return(new StorageInfo { fileName = fileName, itemId = item.data.id, storageId = storageCreated.data.id, uploadUrl = uploadUrl }); }
public async Task <string> GetFolderId(string projectId, string versionId, string userAccessToken) { VersionsApi versionApi = new VersionsApi(); versionApi.Configuration.AccessToken = userAccessToken; dynamic versionItem = await versionApi.GetVersionItemAsync(projectId, versionId); string itemId = versionItem.data.id; ItemsApi itemApi = new ItemsApi(); itemApi.Configuration.AccessToken = userAccessToken; dynamic item = await itemApi.GetItemAsync(projectId, itemId); string folderId = item.data.relationships.parent.data.id;; return(folderId); }
//public async Task<dynamic> UploadObject([FromForm]UploadFile input) public async Task <dynamic> UploadObject(Stream input)//mb { // get the uploaded file and save on the server /*mb var fileSavePath = Path.Combine(_env.ContentRootPath, input.fileToUpload.FileName); * using (var stream = new FileStream(fileSavePath, FileMode.Create)) * await input.fileToUpload.CopyToAsync(stream); mb*/ // user credentials Credentials = await Credentials.FromSessionAsync(base.Request.Cookies, Response.Cookies); // extract projectId and folderId from folderHref /*mb string[] hrefParams = input.folderHref.Split("/"); * string projectId = hrefParams[hrefParams.Length - 3]; * string folderId = hrefParams[hrefParams.Length - 1]; mb*/ string projectId = "3be23c1c-1383-440a-b395-ac5933f797a1"; string folderId = "urn:adsk.wipprod:fs.folder:co.-w2D5-voTQiB-6-aowONzg"; string fileName = "result.ifc"; // prepare storage ProjectsApi projectApi = new ProjectsApi(); projectApi.Configuration.AccessToken = Credentials.TokenInternal; StorageRelationshipsTargetData storageRelData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, folderId); CreateStorageDataRelationshipsTarget storageTarget = new CreateStorageDataRelationshipsTarget(storageRelData); CreateStorageDataRelationships storageRel = new CreateStorageDataRelationships(storageTarget); BaseAttributesExtensionObject attributes = new BaseAttributesExtensionObject(string.Empty, string.Empty, new JsonApiLink(string.Empty), null); //mb CreateStorageDataAttributes storageAtt = new CreateStorageDataAttributes(input.fileToUpload.FileName, attributes); CreateStorageDataAttributes storageAtt = new CreateStorageDataAttributes(fileName, attributes); CreateStorageData storageData = new CreateStorageData(CreateStorageData.TypeEnum.Objects, storageAtt, storageRel); CreateStorage storage = new CreateStorage(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), storageData); dynamic storageCreated = await projectApi.PostStorageAsync(projectId, storage); string[] storageIdParams = ((string)storageCreated.data.id).Split('/'); string[] bucketKeyParams = storageIdParams[storageIdParams.Length - 2].Split(':'); string bucketKey = bucketKeyParams[bucketKeyParams.Length - 1]; string objectName = storageIdParams[storageIdParams.Length - 1]; // upload the file/object, which will create a new object ObjectsApi objects = new ObjectsApi(); objects.Configuration.AccessToken = Credentials.TokenInternal; // get file size //mb long fileSize = (new FileInfo(fileSavePath)).Length; long fileSize = 10; // decide if upload direct or resumable (by chunks) if (fileSize > UPLOAD_CHUNK_SIZE * 1024 * 1024) // upload in chunks { /*mb long chunkSize = 2 * 1024 * 1024; // 2 Mb * long numberOfChunks = (long)Math.Round((double)(fileSize / chunkSize)) + 1; * * long start = 0; * chunkSize = (numberOfChunks > 1 ? chunkSize : fileSize); * long end = chunkSize; * string sessionId = Guid.NewGuid().ToString(); * * // upload one chunk at a time * using (BinaryReader reader = new BinaryReader(new FileStream(fileSavePath, FileMode.Open))) * { * for (int chunkIndex = 0; chunkIndex < numberOfChunks; chunkIndex++) * { * string range = string.Format("bytes {0}-{1}/{2}", start, end, fileSize); * * long numberOfBytes = chunkSize + 1; * byte[] fileBytes = new byte[numberOfBytes]; * MemoryStream memoryStream = new MemoryStream(fileBytes); * reader.BaseStream.Seek((int)start, SeekOrigin.Begin); * int count = reader.Read(fileBytes, 0, (int)numberOfBytes); * memoryStream.Write(fileBytes, 0, (int)numberOfBytes); * memoryStream.Position = 0; * * await objects.UploadChunkAsync(bucketKey, objectName, (int)numberOfBytes, range, sessionId, memoryStream); * * start = end + 1; * chunkSize = ((start + chunkSize > fileSize) ? fileSize - start - 1 : chunkSize); * end = start + chunkSize; * } * } mb*/ } else // upload in a single call { /*mb using (StreamReader streamReader = new StreamReader(fileSavePath)) * { * await objects.UploadObjectAsync(bucketKey, objectName, (int)streamReader.BaseStream.Length, streamReader.BaseStream, "application/octet-stream"); * } mb*/ await objects.UploadObjectAsync(bucketKey, objectName, (int)input.Length, input, "application/octet-stream"); } // cleanup /*mb string fileName = input.fileToUpload.FileName; * System.IO.File.Delete(fileSavePath); mb*/ // check if file already exists... FoldersApi folderApi = new FoldersApi(); folderApi.Configuration.AccessToken = Credentials.TokenInternal; var filesInFolder = await folderApi.GetFolderContentsAsync(projectId, folderId); string itemId = string.Empty; foreach (KeyValuePair <string, dynamic> item in new DynamicDictionaryItems(filesInFolder.data)) { if (item.Value.attributes.displayName == fileName) { itemId = item.Value.id; // this means a file with same name is already there, so we'll create a new version } } // now decide whether create a new item or new version if (string.IsNullOrWhiteSpace(itemId)) { // create a new item BaseAttributesExtensionObject baseAttribute = new BaseAttributesExtensionObject(projectId.StartsWith("a.") ? "items:autodesk.core:File" : "items:autodesk.bim360:File", "1.0"); CreateItemDataAttributes createItemAttributes = new CreateItemDataAttributes(fileName, baseAttribute); CreateItemDataRelationshipsTipData createItemRelationshipsTipData = new CreateItemDataRelationshipsTipData(CreateItemDataRelationshipsTipData.TypeEnum.Versions, CreateItemDataRelationshipsTipData.IdEnum._1); CreateItemDataRelationshipsTip createItemRelationshipsTip = new CreateItemDataRelationshipsTip(createItemRelationshipsTipData); StorageRelationshipsTargetData storageTargetData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, folderId); CreateStorageDataRelationshipsTarget createStorageRelationshipTarget = new CreateStorageDataRelationshipsTarget(storageTargetData); CreateItemDataRelationships createItemDataRelationhips = new CreateItemDataRelationships(createItemRelationshipsTip, createStorageRelationshipTarget); CreateItemData createItemData = new CreateItemData(CreateItemData.TypeEnum.Items, createItemAttributes, createItemDataRelationhips); BaseAttributesExtensionObject baseAttExtensionObj = new BaseAttributesExtensionObject(projectId.StartsWith("a.") ? "versions:autodesk.core:File" : "versions:autodesk.bim360:File", "1.0"); CreateStorageDataAttributes storageDataAtt = new CreateStorageDataAttributes(fileName, baseAttExtensionObj); CreateItemRelationshipsStorageData createItemRelationshipsStorageData = new CreateItemRelationshipsStorageData(CreateItemRelationshipsStorageData.TypeEnum.Objects, storageCreated.data.id); CreateItemRelationshipsStorage createItemRelationshipsStorage = new CreateItemRelationshipsStorage(createItemRelationshipsStorageData); CreateItemRelationships createItemRelationship = new CreateItemRelationships(createItemRelationshipsStorage); CreateItemIncluded includedVersion = new CreateItemIncluded(CreateItemIncluded.TypeEnum.Versions, CreateItemIncluded.IdEnum._1, storageDataAtt, createItemRelationship); CreateItem createItem = new CreateItem(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), createItemData, new List <CreateItemIncluded>() { includedVersion }); ItemsApi itemsApi = new ItemsApi(); itemsApi.Configuration.AccessToken = Credentials.TokenInternal; var newItem = await itemsApi.PostItemAsync(projectId, createItem); return(newItem); } else { // create a new version BaseAttributesExtensionObject attExtensionObj = new BaseAttributesExtensionObject(projectId.StartsWith("a.") ? "versions:autodesk.core:File" : "versions:autodesk.bim360:File", "1.0"); CreateStorageDataAttributes storageDataAtt = new CreateStorageDataAttributes(fileName, attExtensionObj); CreateVersionDataRelationshipsItemData dataRelationshipsItemData = new CreateVersionDataRelationshipsItemData(CreateVersionDataRelationshipsItemData.TypeEnum.Items, itemId); CreateVersionDataRelationshipsItem dataRelationshipsItem = new CreateVersionDataRelationshipsItem(dataRelationshipsItemData); CreateItemRelationshipsStorageData itemRelationshipsStorageData = new CreateItemRelationshipsStorageData(CreateItemRelationshipsStorageData.TypeEnum.Objects, storageCreated.data.id); CreateItemRelationshipsStorage itemRelationshipsStorage = new CreateItemRelationshipsStorage(itemRelationshipsStorageData); CreateVersionDataRelationships dataRelationships = new CreateVersionDataRelationships(dataRelationshipsItem, itemRelationshipsStorage); CreateVersionData versionData = new CreateVersionData(CreateVersionData.TypeEnum.Versions, storageDataAtt, dataRelationships); CreateVersion newVersionData = new CreateVersion(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), versionData); VersionsApi versionsApis = new VersionsApi(); versionsApis.Configuration.AccessToken = Credentials.TokenInternal; dynamic newVersion = await versionsApis.PostVersionAsync(projectId, newVersionData); return(newVersion); } }
public void Init() { instance = new VersionsApi(); }
public async Task <IActionResult> SubmitProject([FromForm] InputSubmit input) { string projectId = "b.014c6054-6da1-4ed8-b199-1975c07f608a"; string folderId = "urn:adsk.wipprod:fs.folder:co.1X3m8NAlRL-xNDQsXk_bxQ"; Credentials credentials = await Credentials.FromDatabaseAsync(Utils.GetAppSetting("USERID")); dynamic token2lo = await OAuthController2L.GetInternalAsync(); var fileSavePath = Path.Combine(_env.ContentRootPath, input.fileToUpload.FileName); using (var stream = new FileStream(fileSavePath, FileMode.Create)) await input.fileToUpload.CopyToAsync(stream); // prepare storage ProjectsApi projectApi = new ProjectsApi(); projectApi.Configuration.AccessToken = credentials.TokenInternal; StorageRelationshipsTargetData storageRelData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, folderId); CreateStorageDataRelationshipsTarget storageTarget = new CreateStorageDataRelationshipsTarget(storageRelData); CreateStorageDataRelationships storageRel = new CreateStorageDataRelationships(storageTarget); BaseAttributesExtensionObject attributes = new BaseAttributesExtensionObject(string.Empty, string.Empty, new JsonApiLink(string.Empty), null); CreateStorageDataAttributes storageAtt = new CreateStorageDataAttributes(input.fileToUpload.FileName, attributes); CreateStorageData storageData = new CreateStorageData(CreateStorageData.TypeEnum.Objects, storageAtt, storageRel); CreateStorage storage = new CreateStorage(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), storageData); dynamic storageCreated = await projectApi.PostStorageAsync(projectId, storage); string[] storageIdParams = ((string)storageCreated.data.id).Split('/'); string[] bucketKeyParams = storageIdParams[storageIdParams.Length - 2].Split(':'); string bucketKey = bucketKeyParams[bucketKeyParams.Length - 1]; string objectName = storageIdParams[storageIdParams.Length - 1]; // upload the file/object, which will create a new object ObjectsApi objects = new ObjectsApi(); objects.Configuration.AccessToken = credentials.TokenInternal; // get file size long fileSize = (new FileInfo(fileSavePath)).Length; // decide if upload direct or resumable (by chunks) if (fileSize > UPLOAD_CHUNK_SIZE * 1024 * 1024) // upload in chunks { long chunkSize = 2 * 1024 * 1024; // 2 Mb long numberOfChunks = (long)Math.Round((double)(fileSize / chunkSize)) + 1; long start = 0; chunkSize = (numberOfChunks > 1 ? chunkSize : fileSize); long end = chunkSize; string sessionId = Guid.NewGuid().ToString(); // upload one chunk at a time using (BinaryReader reader = new BinaryReader(new FileStream(fileSavePath, FileMode.Open))) { for (int chunkIndex = 0; chunkIndex < numberOfChunks; chunkIndex++) { string range = string.Format("bytes {0}-{1}/{2}", start, end, fileSize); long numberOfBytes = chunkSize + 1; byte[] fileBytes = new byte[numberOfBytes]; MemoryStream memoryStream = new MemoryStream(fileBytes); reader.BaseStream.Seek((int)start, SeekOrigin.Begin); int count = reader.Read(fileBytes, 0, (int)numberOfBytes); memoryStream.Write(fileBytes, 0, (int)numberOfBytes); memoryStream.Position = 0; await objects.UploadChunkAsync(bucketKey, objectName, (int)numberOfBytes, range, sessionId, memoryStream); start = end + 1; chunkSize = ((start + chunkSize > fileSize) ? fileSize - start - 1 : chunkSize); end = start + chunkSize; } } } else // upload in a single call { using (StreamReader streamReader = new StreamReader(fileSavePath)) { await objects.UploadObjectAsync(bucketKey, objectName, (int)streamReader.BaseStream.Length, streamReader.BaseStream, "application/octet-stream"); } } // cleanup string fileName = input.fileToUpload.FileName; System.IO.File.Delete(fileSavePath); // check if file already exists... FoldersApi folderApi = new FoldersApi(); folderApi.Configuration.AccessToken = credentials.TokenInternal; var filesInFolder = await folderApi.GetFolderContentsAsync(projectId, folderId); string itemId = string.Empty; foreach (KeyValuePair <string, dynamic> item in new DynamicDictionaryItems(filesInFolder.data)) { if (item.Value.attributes.displayName == fileName) { itemId = item.Value.id; // this means a file with same name is already there, so we'll create a new version } } // now decide whether create a new item or new version if (string.IsNullOrWhiteSpace(itemId)) { // create a new item BaseAttributesExtensionObject baseAttribute = new BaseAttributesExtensionObject(projectId.StartsWith("a.") ? "items:autodesk.core:File" : "items:autodesk.bim360:File", "1.0"); CreateItemDataAttributes createItemAttributes = new CreateItemDataAttributes(fileName, baseAttribute); CreateItemDataRelationshipsTipData createItemRelationshipsTipData = new CreateItemDataRelationshipsTipData(CreateItemDataRelationshipsTipData.TypeEnum.Versions, CreateItemDataRelationshipsTipData.IdEnum._1); CreateItemDataRelationshipsTip createItemRelationshipsTip = new CreateItemDataRelationshipsTip(createItemRelationshipsTipData); StorageRelationshipsTargetData storageTargetData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, folderId); CreateStorageDataRelationshipsTarget createStorageRelationshipTarget = new CreateStorageDataRelationshipsTarget(storageTargetData); CreateItemDataRelationships createItemDataRelationhips = new CreateItemDataRelationships(createItemRelationshipsTip, createStorageRelationshipTarget); CreateItemData createItemData = new CreateItemData(CreateItemData.TypeEnum.Items, createItemAttributes, createItemDataRelationhips); BaseAttributesExtensionObject baseAttExtensionObj = new BaseAttributesExtensionObject(projectId.StartsWith("a.") ? "versions:autodesk.core:File" : "versions:autodesk.bim360:File", "1.0"); CreateStorageDataAttributes storageDataAtt = new CreateStorageDataAttributes(fileName, baseAttExtensionObj); CreateItemRelationshipsStorageData createItemRelationshipsStorageData = new CreateItemRelationshipsStorageData(CreateItemRelationshipsStorageData.TypeEnum.Objects, storageCreated.data.id); CreateItemRelationshipsStorage createItemRelationshipsStorage = new CreateItemRelationshipsStorage(createItemRelationshipsStorageData); CreateItemRelationships createItemRelationship = new CreateItemRelationships(createItemRelationshipsStorage); CreateItemIncluded includedVersion = new CreateItemIncluded(CreateItemIncluded.TypeEnum.Versions, CreateItemIncluded.IdEnum._1, storageDataAtt, createItemRelationship); CreateItem createItem = new CreateItem(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), createItemData, new List <CreateItemIncluded>() { includedVersion }); ItemsApi itemsApi = new ItemsApi(); itemsApi.Configuration.AccessToken = credentials.TokenInternal; var newItem = await itemsApi.PostItemAsync(projectId, createItem); itemId = newItem.data.id; } else { // create a new version BaseAttributesExtensionObject attExtensionObj = new BaseAttributesExtensionObject(projectId.StartsWith("a.") ? "versions:autodesk.core:File" : "versions:autodesk.bim360:File", "1.0"); CreateStorageDataAttributes storageDataAtt = new CreateStorageDataAttributes(fileName, attExtensionObj); CreateVersionDataRelationshipsItemData dataRelationshipsItemData = new CreateVersionDataRelationshipsItemData(CreateVersionDataRelationshipsItemData.TypeEnum.Items, itemId); CreateVersionDataRelationshipsItem dataRelationshipsItem = new CreateVersionDataRelationshipsItem(dataRelationshipsItemData); CreateItemRelationshipsStorageData itemRelationshipsStorageData = new CreateItemRelationshipsStorageData(CreateItemRelationshipsStorageData.TypeEnum.Objects, storageCreated.data.id); CreateItemRelationshipsStorage itemRelationshipsStorage = new CreateItemRelationshipsStorage(itemRelationshipsStorageData); CreateVersionDataRelationships dataRelationships = new CreateVersionDataRelationships(dataRelationshipsItem, itemRelationshipsStorage); CreateVersionData versionData = new CreateVersionData(CreateVersionData.TypeEnum.Versions, storageDataAtt, dataRelationships); CreateVersion newVersionData = new CreateVersion(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), versionData); VersionsApi versionsApis = new VersionsApi(); versionsApis.Configuration.AccessToken = credentials.TokenInternal; dynamic newVersion = await versionsApis.PostVersionAsync(projectId, newVersionData); } await NotificationDB.Register(itemId, input.phoneNumber); return(Ok()); }
public ChannelsApi(IBitmovinApiClientFactory apiClientFactory) { _apiClient = apiClientFactory.CreateClient <IChannelsApiClient>(); Versions = new VersionsApi(apiClientFactory); }
private async void startDownload(MyTreeNode node, MyListItem item) { if (item == null) { item = addFileToList(node); } try { setItemState(item, DownloadState.Downloading); var versionsApi = new VersionsApi(); versionsApi.Configuration.AccessToken = logInInfo.accessToken; string[] idParams = node.id.Split('/'); string versionId = HttpUtility.UrlDecode(idParams[idParams.Length - 1]); string projectId = idParams[idParams.Length - 3]; dynamic version = null; while (version == null) { try { version = await versionsApi.GetVersionAsync(projectId, versionId); } catch (Exception ex) { Debug.Print("startDownload >> catch1 : " + ex.Message); await Task.Delay(kTimeOutDelay); } } string href = null; // Is it a Fusion Design or Drawing? if (node.isFusionFile()) { // Request f3z setItemState(item, DownloadState.Waiting); href = await getF3z(projectId, versionId); setItemState(item, DownloadState.Downloading); } else { try { href = version.data.relationships.storage.meta.link.href; } catch (Exception ex) { Debug.Print("startDownload >> catch2 : " + ex.Message); } } if (href == null) { throw new Exception("Download failed"); } Debug.Print("startDownload : Before calling downloadFile"); await downloadFile(item.localPath, href); Debug.Print("startDownload : After calling downloadFile"); setItemState(item, DownloadState.Downloaded); } catch (Exception ex) { Debug.Print("startDownload >> catch : " + ex.Message); setItemState(item, DownloadState.Failed); } }
//public async Task<IActionResult> Testing(string id) public async Task <IList <jsTreeNode> > Testing1(string id) { IList <jsTreeNode> nodes = new List <jsTreeNode>(); // the API SDK Credentials credentials = await Credentials.FromSessionAsync(base.Request.Cookies, Response.Cookies); ItemsApi itemApi = new ItemsApi(); itemApi.Configuration.AccessToken = credentials.TokenInternal; // extract the projectId & itemId from the href string[] idParams = id.Split('/'); string itemId = idParams[idParams.Length - 1]; string projectId = idParams[idParams.Length - 3]; var versions = await itemApi.GetItemVersionsAsync(projectId, itemId); dynamic item = await itemApi.GetItemAsync(projectId, itemId); string folderId = item.data.relationships.parent.data.id; string fileName = item.data.attributes.displayName; string versionId = null; foreach (KeyValuePair <string, dynamic> version in new DynamicDictionaryItems(versions.data)) { DateTime versionDate = version.Value.attributes.lastModifiedTime; string verNum = version.Value.id.Split("=")[1]; string userName = version.Value.attributes.lastModifiedUserName; versionId = version.Value.id; string urn = string.Empty; try { urn = (string)version.Value.relationships.derivatives.data.id; } catch { } } // Prepare the DA input from BIM 360 var input = await BuildBIM360DownloadURL(credentials.TokenInternal, projectId, versionId); //var output = await PreWorkNewVersion(credentials.TokenInternal, projectId, versionId); // Create a version for this new file // prepare storage ProjectsApi projectApis = new ProjectsApi(); projectApis.Configuration.AccessToken = credentials.TokenInternal; StorageRelationshipsTargetData storageRelData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, folderId); CreateStorageDataRelationshipsTarget storageTarget = new CreateStorageDataRelationshipsTarget(storageRelData); CreateStorageDataRelationships storageRel = new CreateStorageDataRelationships(storageTarget); BaseAttributesExtensionObject attributes = new BaseAttributesExtensionObject(string.Empty, string.Empty, new JsonApiLink(string.Empty), null); CreateStorageDataAttributes storageAtt = new CreateStorageDataAttributes(fileName, attributes); CreateStorageData storageData = new CreateStorageData(CreateStorageData.TypeEnum.Objects, storageAtt, storageRel); CreateStorage storage = new CreateStorage(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), storageData); dynamic storageCreated = await projectApis.PostStorageAsync(projectId, storage); VersionsApi versionsApi = new VersionsApi(); versionsApi.Configuration.AccessToken = credentials.TokenInternal; CreateVersion newVersionData = new CreateVersion ( new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), new CreateVersionData ( CreateVersionData.TypeEnum.Versions, new CreateStorageDataAttributes ( fileName, new BaseAttributesExtensionObject ( "versions:autodesk.bim360:File", "1.0", new JsonApiLink(string.Empty), null ) ), new CreateVersionDataRelationships ( new CreateVersionDataRelationshipsItem ( new CreateVersionDataRelationshipsItemData ( CreateVersionDataRelationshipsItemData.TypeEnum.Items, itemId ) ), new CreateItemRelationshipsStorage ( new CreateItemRelationshipsStorageData ( CreateItemRelationshipsStorageData.TypeEnum.Objects, storageCreated.data.id ) ) ) ) ); dynamic newVersion = await versionsApi.PostVersionAsync(projectId, newVersionData); return(nodes); }
public static async Task UploadAsync() { ProjectsApi projectsApi = new ProjectsApi(); StorageRelationshipsTargetData storageRelData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, "urn:adsk.wipprod:fs.folder:co.OoAFTIjQTdCEF2HJUjee0g"); CreateStorageDataRelationshipsTarget storageTarget = new CreateStorageDataRelationshipsTarget(storageRelData); CreateStorageDataRelationships storageRel = new CreateStorageDataRelationships(storageTarget); BaseAttributesExtensionObject attributes = new BaseAttributesExtensionObject(string.Empty, string.Empty, new JsonApiLink(string.Empty), null); CreateStorageDataAttributes storageAtt = new CreateStorageDataAttributes("test", attributes); CreateStorageData storageData = new CreateStorageData(CreateStorageData.TypeEnum.Objects, storageAtt, storageRel); CreateStorage storage = new CreateStorage(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), storageData); dynamic storageCreated = await projectsApi.PostStorageAsync("3b5c6352-cf34-41fd-a0e9-a5246d93bf55", storage); string[] storageIdParams = ((string)storageCreated.data.id).Split('/'); string[] bucketKeyParams = storageIdParams[storageIdParams.Length - 2].Split(':'); string bucketKey = bucketKeyParams[bucketKeyParams.Length - 1]; string objectName = storageIdParams[storageIdParams.Length - 1]; ObjectsApi objects = new ObjectsApi(); objects.Configuration.AccessToken = token; long fileSize = (new FileInfo(@"C:\Users\joao.martins\Desktop\ESGOTO_R2.rvt")).Length; if (fileSize > 5 * 1024 * 1024) // upload in chunks if > 5Mb { long chunkSize = 2 * 1024 * 1024; // 2 Mb long numberOfChunks = (long)Math.Round((double)(fileSize / chunkSize)) + 1; long start = 0; chunkSize = (numberOfChunks > 1 ? chunkSize : fileSize); long end = chunkSize; string sessionId = Guid.NewGuid().ToString(); // upload one chunk at a time using (BinaryReader reader = new BinaryReader(new FileStream(@"C:\Users\joao.martins\Desktop\ESGOTO_R2.rvt", FileMode.Open))) { for (int chunkIndex = 0; chunkIndex < numberOfChunks; chunkIndex++) { string range = string.Format("bytes {0}-{1}/{2}", start, end, fileSize); long numberOfBytes = chunkSize + 1; byte[] fileBytes = new byte[numberOfBytes]; MemoryStream memoryStream = new MemoryStream(fileBytes); reader.BaseStream.Seek((int)start, SeekOrigin.Begin); int count = reader.Read(fileBytes, 0, (int)numberOfBytes); memoryStream.Write(fileBytes, 0, (int)numberOfBytes); memoryStream.Position = 0; await objects.UploadChunkAsync(bucketKey, objectName, (int)numberOfBytes, range, sessionId, memoryStream); start = end + 1; chunkSize = ((start + chunkSize > fileSize) ? fileSize - start - 1 : chunkSize); end = start + chunkSize; } } } else // upload in a single call { using (StreamReader streamReader = new StreamReader(@"C:\Users\joao.martins\Desktop\ESGOTO_R2.rvt")) { await objects.UploadObjectAsync(bucketKey, objectName, (int)streamReader.BaseStream.Length, streamReader.BaseStream, "application/octet-stream"); } } // check if file already exists... FoldersApi folderApi = new FoldersApi(); folderApi.Configuration.AccessToken = token; var filesInFolder = await folderApi.GetFolderContentsAsync("3b5c6352-cf34-41fd-a0e9-a5246d93bf55", "urn:adsk.wipprod:fs.folder:co.OoAFTIjQTdCEF2HJUjee0g"); string itemId = string.Empty; foreach (KeyValuePair <string, dynamic> item in new DynamicDictionaryItems(filesInFolder.data)) { if (item.Value.attributes.displayName == "test") { itemId = item.Value.id; // this means a file with same name is already there, so we'll create a new version } } // now decide whether create a new item or new version if (string.IsNullOrWhiteSpace(itemId)) { // create a new item BaseAttributesExtensionObject baseAttribute = new BaseAttributesExtensionObject("3b5c6352-cf34-41fd-a0e9-a5246d93bf55".StartsWith("a.") ? "items:autodesk.core:File" : "items:autodesk.bim360:File", "1.0"); CreateItemDataAttributes createItemAttributes = new CreateItemDataAttributes("test", baseAttribute); CreateItemDataRelationshipsTipData createItemRelationshipsTipData = new CreateItemDataRelationshipsTipData(CreateItemDataRelationshipsTipData.TypeEnum.Versions, CreateItemDataRelationshipsTipData.IdEnum._1); CreateItemDataRelationshipsTip createItemRelationshipsTip = new CreateItemDataRelationshipsTip(createItemRelationshipsTipData); StorageRelationshipsTargetData storageTargetData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, "urn:adsk.wipprod:fs.folder:co.OoAFTIjQTdCEF2HJUjee0g"); CreateStorageDataRelationshipsTarget createStorageRelationshipTarget = new CreateStorageDataRelationshipsTarget(storageTargetData); CreateItemDataRelationships createItemDataRelationhips = new CreateItemDataRelationships(createItemRelationshipsTip, createStorageRelationshipTarget); CreateItemData createItemData = new CreateItemData(CreateItemData.TypeEnum.Items, createItemAttributes, createItemDataRelationhips); BaseAttributesExtensionObject baseAttExtensionObj = new BaseAttributesExtensionObject("3b5c6352-cf34-41fd-a0e9-a5246d93bf55".StartsWith("a.") ? "versions:autodesk.core:File" : "versions:autodesk.bim360:File", "1.0"); CreateStorageDataAttributes storageDataAtt = new CreateStorageDataAttributes("test", baseAttExtensionObj); CreateItemRelationshipsStorageData createItemRelationshipsStorageData = new CreateItemRelationshipsStorageData(CreateItemRelationshipsStorageData.TypeEnum.Objects, storageCreated.data.id); CreateItemRelationshipsStorage createItemRelationshipsStorage = new CreateItemRelationshipsStorage(createItemRelationshipsStorageData); CreateItemRelationships createItemRelationship = new CreateItemRelationships(createItemRelationshipsStorage); CreateItemIncluded includedVersion = new CreateItemIncluded(CreateItemIncluded.TypeEnum.Versions, CreateItemIncluded.IdEnum._1, storageDataAtt, createItemRelationship); CreateItem createItem = new CreateItem(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), createItemData, new List <CreateItemIncluded>() { includedVersion }); ItemsApi itemsApi = new ItemsApi(); itemsApi.Configuration.AccessToken = token; var newItem = await itemsApi.PostItemAsync("3b5c6352-cf34-41fd-a0e9-a5246d93bf55", createItem); } else { // create a new version BaseAttributesExtensionObject attExtensionObj = new BaseAttributesExtensionObject("3b5c6352-cf34-41fd-a0e9-a5246d93bf55".StartsWith("a.") ? "versions:autodesk.core:File" : "versions:autodesk.bim360:File", "1.0"); CreateStorageDataAttributes storageDataAtt = new CreateStorageDataAttributes("test", attExtensionObj); CreateVersionDataRelationshipsItemData dataRelationshipsItemData = new CreateVersionDataRelationshipsItemData(CreateVersionDataRelationshipsItemData.TypeEnum.Items, itemId); CreateVersionDataRelationshipsItem dataRelationshipsItem = new CreateVersionDataRelationshipsItem(dataRelationshipsItemData); CreateItemRelationshipsStorageData itemRelationshipsStorageData = new CreateItemRelationshipsStorageData(CreateItemRelationshipsStorageData.TypeEnum.Objects, storageCreated.data.id); CreateItemRelationshipsStorage itemRelationshipsStorage = new CreateItemRelationshipsStorage(itemRelationshipsStorageData); CreateVersionDataRelationships dataRelationships = new CreateVersionDataRelationships(dataRelationshipsItem, itemRelationshipsStorage); CreateVersionData versionData = new CreateVersionData(CreateVersionData.TypeEnum.Versions, storageDataAtt, dataRelationships); CreateVersion newVersionData = new CreateVersion(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), versionData); VersionsApi versionsApis = new VersionsApi(); versionsApis.Configuration.AccessToken = token; dynamic newVersion = await versionsApis.PostVersionAsync("3b5c6352-cf34-41fd-a0e9-a5246d93bf55", newVersionData); } }
public async Task <IActionResult> StartWorkitem([FromForm] StartWorkitemInput input) { Credentials = await Credentials.FromSessionAsync(base.Request.Cookies, Response.Cookies); if (Credentials == null) { return(null); } // basic input validation JObject workItemData = JObject.Parse(input.data); string inputRvtFileName = workItemData["inputRvtFileName"].Value <string>(); string inputRvtFileUrl = workItemData["inputRvtFileUrl"].Value <string>(); string inputFamilyFileName = workItemData["inputFamilyFileName"].Value <string>(); string inputFamilyFileUrl = workItemData["inputFamilyFileUrl"].Value <string>(); string outputFolderUrl = workItemData["outputFolderUrl"].Value <string>(); string roomUniquId = workItemData["roomUniquId"].Value <string>(); string gridTypeId = workItemData["gridTypeId"].Value <string>(); string distanceXMinParam = workItemData["distanceXMinParam"].Value <string>(); string distanceXMaxParam = workItemData["distanceXMaxParam"].Value <string>(); string distanceYMinParam = workItemData["distanceYMinParam"].Value <string>(); string distanceYMaxParam = workItemData["distanceYMaxParam"].Value <string>(); string distanceWallMinParam = workItemData["distanceWallMinParam"].Value <string>(); string distanceWallMaxParam = workItemData["distanceWallMaxParam"].Value <string>(); string browerConnectionId = workItemData["browerConnectionId"].Value <string>(); string activityName = string.Format("{0}.{1}", NickName, workItemData["activityName"].Value <string>()); // OAuth token dynamic da4rToken = Credentials.DA4RTokenInternal; dynamic userToken = Credentials.TokenInternal; VersionsApi versionApi = new VersionsApi(); versionApi.Configuration.AccessToken = Credentials.TokenInternal; // Revit file download URL string[] revitFileParams = inputRvtFileUrl.Split('/'); string revitFileProjectIdParam = revitFileParams[1]; string revitFileVersionIdParam = revitFileParams[2]; dynamic revitFileVersion = await versionApi.GetVersionAsync(revitFileProjectIdParam, revitFileVersionIdParam); string[] revitFileVersionStorageParams = ((string)revitFileVersion.data.relationships.storage.data.id).Split('/'); string[] revitFileBucketKeyParams = revitFileVersionStorageParams[revitFileVersionStorageParams.Length - 2].Split(':'); string revitFileBucketKey = revitFileBucketKeyParams[revitFileBucketKeyParams.Length - 1]; string revitFileObjectName = revitFileVersionStorageParams[revitFileVersionStorageParams.Length - 1]; string revitFileDownloadUrl = string.Format("https://developer.api.autodesk.com/oss/v2/buckets/{0}/objects/{1}", revitFileBucketKey, revitFileObjectName); // Family file download URL string[] familyFileParams = inputFamilyFileUrl.Split('/'); string familyFileProjectIdParam = familyFileParams[1]; string familyFileVersionIdParam = familyFileParams[2]; dynamic familyFileVersion = await versionApi.GetVersionAsync(familyFileProjectIdParam, familyFileVersionIdParam); string[] familyFileVersionStorageParams = ((string)familyFileVersion.data.relationships.storage.data.id).Split('/'); string[] familyFileBucketKeyParams = familyFileVersionStorageParams[familyFileVersionStorageParams.Length - 2].Split(':'); string familyFileBucketKey = familyFileBucketKeyParams[familyFileBucketKeyParams.Length - 1]; string familyFileObjectName = familyFileVersionStorageParams[familyFileVersionStorageParams.Length - 1]; string familyFileDownloadUrl = string.Format("https://developer.api.autodesk.com/oss/v2/buckets/{0}/objects/{1}", familyFileBucketKey, familyFileObjectName); // prepare workitem arguments // 1. input file XrefTreeArgument inputRevitFileArgument = new XrefTreeArgument() { Url = string.Format(revitFileDownloadUrl), Verb = Verb.Get, Headers = new Dictionary <string, string>() { { "Authorization", "Bearer " + userToken } } }; XrefTreeArgument inputFamilyFileArgument = new XrefTreeArgument() { Url = string.Format(familyFileDownloadUrl), Verb = Verb.Get, Headers = new Dictionary <string, string>() { { "Authorization", "Bearer " + userToken } } }; // 2. input json dynamic inputJson = new JObject(); inputJson.RoomUniqueId = roomUniquId; inputJson.GridTypeId = gridTypeId; inputJson.FamilyFileName = inputFamilyFileName; inputJson.OutputZipFileName = "exportedDwgs"; inputJson.DistanceXMinParam = distanceXMinParam; inputJson.DistanceXMaxParam = distanceXMaxParam; inputJson.DistanceYMinParam = distanceYMinParam; inputJson.DistanceYMaxParam = distanceYMaxParam; inputJson.DistanceWallMinParam = distanceWallMinParam; inputJson.DistanceWallMaxParam = distanceWallMaxParam; XrefTreeArgument inputJsonArgument = new XrefTreeArgument() { Url = "data:application/json, " + ((JObject)inputJson).ToString(Formatting.None).Replace("\"", "'") }; // 3. output file string[] folderParams = outputFolderUrl.Split('/'); string outputFolderId = folderParams[folderParams.Length - 1]; string outputProjectId = folderParams[folderParams.Length - 3]; dynamic storageCreatedZip = await this.CreateStorage(outputFolderId, outputProjectId, "exportedDwgs" + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".zip"); string[] zipFileStorageIdParams = ((string)storageCreatedZip.data.id).Split('/'); string[] zipFileBucketKeyParams = zipFileStorageIdParams[zipFileStorageIdParams.Length - 2].Split(':'); string zipFileBucketKey = zipFileBucketKeyParams[zipFileBucketKeyParams.Length - 1]; string zipFileObjectName = zipFileStorageIdParams[zipFileStorageIdParams.Length - 1]; string uploadZipFileUrl = string.Format("https://developer.api.autodesk.com/oss/v2/buckets/{0}/objects/{1}", zipFileBucketKey, zipFileObjectName); XrefTreeArgument outputZipFileArgument = new XrefTreeArgument() { Url = uploadZipFileUrl, Verb = Verb.Put, Headers = new Dictionary <string, string>() { { "Authorization", "Bearer " + userToken } } }; // prepare & submit workitem string callbackUrl = string.Format("{0}/api/forge/callback/designautomation/grid_object_placement?id={1}&zipFileName={2}&zipFileBucketKey={3}&zipFileObjectName={4}&zipStorageId={5}&projectId={6}&folderId={7}", Credentials.GetAppSetting("FORGE_WEBHOOK_URL"), browerConnectionId, "exportedDwgs.zip", zipFileBucketKey, zipFileObjectName, (string)storageCreatedZip.data.id, outputProjectId, outputFolderId); WorkItem workItemSpec = new WorkItem() { ActivityId = activityName, Arguments = new Dictionary <string, IArgument>() { { "inputRvtFile", inputRevitFileArgument }, { "inputFamilyFile", inputFamilyFileArgument }, { "inputJsonFile", inputJsonArgument }, { "resultZipFile", outputZipFileArgument }, { "onComplete", new XrefTreeArgument { Verb = Verb.Post, Url = callbackUrl } } } }; WorkItemStatus workItemStatus = null; try { workItemStatus = await _designAutomation.CreateWorkItemAsync(workItemSpec); } catch (Exception e) { string message = e.Message; } return(Ok(new { WorkItemId = workItemStatus.Id })); }