Upload and download file from Blob Storage using x++

PHOTO EMBED

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

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