Upload and download file from Blob Storage using x++
Sun Sep 01 2024 09:41:13 GMT+0000 (Coordinated Universal Time)
Saved by @Manjunath
-------------------------------CPLImplimented code------------------------------------------------- using Microsoft.WindowsAzure.Storage; Using Microsoft.WindowsAzure.Storage.Blob; using System.IO; using Microsoft.Dynamics.AX.Framework.FileManagement; public final class CPLAzureBlobStorageUtility { public static boolean upLoadFilebyStream(System.IO.Stream memoryStream, str _fileName) // { boolean ret = false; ProdParameters prodParameters = ProdParameters::find(); String255 connectionString = ProdParameters.CPLAzureBlobConnectionStr; //"DefaultEndpointsProtocol=https;AccountName=cpltest;AccountKey=JqrWct3zc10YGDUTefsi+sEj0OfsAjvpje3je4GLWhxKKfd3Iybn8Q7oqdW8F+V+O80/DLDh0Ox0+ASt6ifb4g==;EndpointSuffix=core.windows.net"; String50 containerName = ProdParameters.CPLDrumFileExportContainerName; //"geodisxml"; str errorMsg; //Validation-start if(connectionString == '') errorMsg +='Azure Bolb connection string is missing in the production control parameters\n'; if(containerName == '') errorMsg +='Azure Bolb container name is missing in the production control parameters\n'; if(_fileName == '') errorMsg +='Drum label file name is missing'; if(errorMsg !='') { throw error(errorMsg); return ret; } //connect to blob storage-start CloudStorageAccount cloudStorageAccount = CloudStorageAccount::Parse(connectionString); CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient(); CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference(containerName); cloudBlobContainer.CreateIfNotExistsAsync(); //Upload File to blob container-start // Access to sub folders we can use cloudBolbDirectory // CloudBlobDirectory cloudBlobDirectory; // cloudBlobDirectory = _cloudBlobContainer.GetDirectoryReference("My Folder"); // CloudBlockBlob = cloudBlobDirectory.GetBlockBlobReference("File.Txt"); CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(_fileName); memoryStream.Seek(0, System.IO.SeekOrigin::Begin); cloudBlockBlob.UploadFromStream(memoryStream, null, null, null); cloudBlockBlob.FetchAttributes(null,null,null); BlobProperties blobProperties = cloudBlockBlob.Properties; if(blobProperties.Length != 0) { info('File upload successful'); ret = true; } return ret; } } -------------------------------Reference blob------------------------------------------------------ using Microsoft.WindowsAzure.Storage; Using Microsoft.WindowsAzure.Storage.Blob; using System.IO; class TestAzureBlob { public static void main(Args _args) { TestAzureBlob testAzureBlob = new TestAzureBlob(); CloudBlobContainer blobContainer; // Connecting container blobContainer = testAzureBlob.connectToAzureBlob(); // Get's the file List testAzureBlob.getFilesList(blobContainer);// Way 1 testAzureBlob.readTheFiles(blobContainer);// Way 2 // Read the data in file testAzureBlob.readFileValue(blobContainer); // upload the file testAzureBlob.UploadFileToBlob(blobContainer); // move the file testAzureBlob.moveTheFileFromOneFolderToAnotherFolder(blobContainer); // delete the file testAzureBlob.deleteFileFromFolder(blobContainer); } } // Connect to Blob: public CloudBlobContainer connectToAzureBlob() { CloudBlobClient cloudBlobClient; CloudBlobContainer cloudBlobContainer; CloudStorageAccount cloudStorageAccount; cloudStorageAccount = CloudStorageAccount::Parse("Azure Blob Connection String"); // Example : // ("DefaultEndpointsProtocol = https; // AccountName = 'AccountName';AccountKey = 'AccountKey';EndpointSuffix=core.windows.net"); cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient(); cloudBlobContainer = cloudBlobClient.GetContainerReference("mycontainer"); Info(cloudBlobContainer.Name); return cloudBlobContainer; } // Get the files List: // Way 1: public void getFilesList(CloudBlobContainer _cloudBlobContainer) { // Directory of blob container CloudBlobDirectory cloudBlobDirectory; container fileCon; // Folder Path cloudBlobDirectory = _cloudBlobContainer.GetDirectoryReference("My Folder"); System.Collections.IEnumerable lstEnumarable = cloudBlobDirectory.ListBlobs(false, 0, null, null); System.Collections.IEnumerator lstEnumarator = lstEnumarable.GetEnumerator(); List filenames = new List(Types::String); while(lstEnumarator.MoveNext()) { IListBlobItem item = lstEnumarator.Current; if (item is CloudBlockBlob) { CloudBlockBlob blob = item; blob.FetchAttributes(null, null, null); fileCon = str2con(blob.name, "/"); filenames.addStart(conPeek(filecon, conLen(filecon))); info(strFmt("File : %1", conPeek(filecon, conLen(filecon)))); } } } // Way 2: public void readTheFiles(CloudBlobContainer _cloudBlobContainer) { System.Collections.IEnumerable lstEnumarable = _cloudBlobContainer.ListBlobs(null, false, 0, null, null); System.Collections.IEnumerator lstEnumarator = lstEnumarable.GetEnumerator(); List filenames = new List(Types::String); while (lstEnumarator.MoveNext()) { IListBlobItem item = lstEnumarator.Current; if (item is CloudBlockBlob) { CloudBlockBlob blob = item; System.IO.StreamReader reader = new System.IO.StreamReader(blob.OpenRead(null, null, null)); Info(reader.ReadToEnd()); } } } // Read the file content: public void readFileValue(CloudBlobContainer _cloudBlobContainer) { CloudBlobDirectory cloudBlobDirectory = _cloudBlobContainer.GetDirectoryReference("My Folder"); CloudBlockBlob blob = cloudBlobDirectory.GetBlockBlobReference("File"); System.IO.Stream memory = blob.openRead(null, null, null); // Read the content System.IO.StreamReader streamReader = new System.IO.StreamReader(memory); // Read each line str strRecord = streamReader.ReadLine(); // while (!System.String::IsNullOrEmpty(strRecord)) { try { container conRecord = str2con_RU(strRecord, ','); info(conPeek(conRecord, 1)); info(conPeek(conRecord, 2)); strRecord = streamReader.ReadLine(); } catch { throw error("Message"); } } } // Upload the file: public void UploadFileToBlob(CloudBlobContainer _cloudBlobContainer) { CloudBlobDirectory cloudBlobDirectory; CloudBlockBlob CloudBlockBlob; System.Byte[] reportBytes = new System.Byte[0](); // File path cloudBlobDirectory = _cloudBlobContainer.GetDirectoryReference("My Folder"); CloudBlockBlob = cloudBlobDirectory.GetBlockBlobReference("File.Txt"); // ---------------- or ---------------- CloudBlockBlob = _cloudBlobContainer.GetBlockBlobReference("File.Txt"); // Encode System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); reportBytes = enc.GetBytes("YOUR XML STRING/TEXT or Data in file"); System.IO.MemoryStream stream = new System.IO.MemoryStream(reportBytes); // upload stream CloudBlockBlob.UploadFromStream(stream, null, null, null); } // Move the file: public void moveTheFileFromOneFolderToAnotherFolder(CloudBlobContainer _cloudBlobContainer) { CloudBlobDirectory sourceCloudBlobDirectory; CloudBlobDirectory destinationCloudBlobDirectory; CloudBlockBlob sourceCloudBlockBlob; CloudBlockBlob destinationCloudBlockBlob; sourceCloudBlobDirectory = _cloudBlobContainer.GetDirectoryReference("My Folder"); destinationCloudBlobDirectory = _cloudBlobContainer.GetDirectoryReference("My Folder 2"); sourceCloudBlockBlob = sourceCloudBlobDirectory.GetBlockBlobReference("File1.Txt"); destinationCloudBlockBlob = destinationCloudBlobDirectory.GetBlockBlobReference("File1.Txt"); // Upload the file to destination destinationCloudBlockBlob.UploadFromStream(sourceCloudBlockBlob.OpenRead(null, null, null), null, null, null); } Delete the file: public void deleteFileFromFolder(CloudBlobContainer _cloudBlobContainer) { CloudBlobDirectory sourceCloudBlobDirectory; CloudBlockBlob sourceCloudBlockBlob; sourceCloudBlobDirectory = _cloudBlobContainer.GetDirectoryReference("My Folder"); sourceCloudBlockBlob = sourceCloudBlobDirectory.GetBlockBlobReference("File2.Txt"); // Delete file sourceCloudBlockBlob.delete(0, null, null, null); }
Upload and download file from Blob Storage using x++. By using below code we connect to Blob storage. Below operations also we can do it. File List Read the file content Move the file between folder. Upload File Delete File
https://kishoredynamics11.blogspot.com/2023/02/upload-and-download-file-from-blob.html
Comments