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