public static void DownloadFile(UserInfo userInfo, QueueItemAttachment attachment, string directoryPath, int count = 0) { var apiInstance = GetAttachmentsApiInstance(userInfo.Token, userInfo.ServerUrl); try { var response = apiInstance.ExportQueueItemAttachmentAsyncWithHttpInfo(attachment.Id.ToString(), userInfo.ApiVersion, userInfo.OrganizationId, attachment.QueueItemId.ToString()).Result; string value; var headers = response.Headers.TryGetValue("Content-Disposition", out value); string fileName; if (headers == true) { string[] valueArray = value.Split('='); string[] fileNameArray = valueArray[1].Split(';'); fileName = fileNameArray[0]; } else { var fileId = attachment.FileId; var fileApiInstance = new FilesApi(userInfo.ServerUrl); fileApiInstance.Configuration.AccessToken = userInfo.Token; var driveApiInstance = new DrivesApi(userInfo.ServerUrl); driveApiInstance.Configuration.AccessToken = userInfo.Token; string filter = "IsDefault eq true"; var driveResponse = driveApiInstance.ApiVapiVersionStorageDrivesGetAsyncWithHttpInfo(userInfo.ApiVersion, userInfo.OrganizationId, filter).Result.Data.Items.FirstOrDefault(); var fileResponse = fileApiInstance.GetFileFolderAsyncWithHttpInfo(attachment.FileId.ToString(), userInfo.ApiVersion, userInfo.OrganizationId, driveResponse.Id.ToString()).Result.Data; fileName = fileResponse.Name; } var data = response.Data; byte[] fileArray = data.ToArray(); System.IO.File.WriteAllBytes(SystemFile.Path.Combine(directoryPath, fileName), fileArray); } catch (Exception ex) { if (ex.GetType().GetProperty("ErrorCode").GetValue(ex, null).ToString() == "401" && count < 2) { UtilityMethods.RefreshToken(userInfo); count++; DownloadFile(userInfo, attachment, directoryPath, count); } else if (ex.Message != "One or more errors occurred.") { throw new InvalidOperationException("Exception when calling QueueItemAttachmentsApi.ExportQueueItemAttachment: " + ex.Message); } else { throw new InvalidOperationException(ex.InnerException.Message); } } }
public static void DownloadFileAsset(string token, string serverUrl, string organizationId, SDKAsset asset, string directoryPath, string apiVersion) { var apiInstance = GetApiInstance(token, serverUrl); try { var response = apiInstance.ExportAssetAsyncWithHttpInfo(asset.Id.ToString(), apiVersion, organizationId).Result; string value; var headers = response.Headers.TryGetValue("Content-Disposition", out value); string fileName; if (headers == true) { string[] valueArray = value.Split('='); string[] fileNameArray = valueArray[1].Split(';'); fileName = fileNameArray[0]; } else { var fileId = asset.FileId; var fileApiInstance = new FilesApi(serverUrl); fileApiInstance.Configuration.AccessToken = token; var driveApiInstance = new DrivesApi(serverUrl); driveApiInstance.Configuration.AccessToken = token; string filter = "IsDefault eq true"; var driveResponse = driveApiInstance.ApiVapiVersionStorageDrivesGetAsyncWithHttpInfo(apiVersion, organizationId, filter).Result.Data.Items.FirstOrDefault(); var fileResponse = fileApiInstance.GetFileFolderAsyncWithHttpInfo(asset.FileId.ToString(), apiVersion, organizationId, driveResponse.Id.ToString()).Result.Data; fileName = fileResponse.Name; } MemoryStream data = response.Data; byte[] file = data.ToArray(); IOFile.WriteAllBytes(Path.Combine(directoryPath, fileName), file); } catch (Exception ex) { if (ex.Message != "One or more errors occurred.") { throw new InvalidOperationException("Exception when calling AssetsApi.ExportAsset: " + ex.Message); } else { throw new InvalidOperationException(ex.InnerException.Message); } } }