Hello Everyone,

This is the 2nd part of the Azure File Storage Tutorial. You can find the Part 1 here.


This is the Part 2 of the tutorial and in this tutorial covers the coding perspective of Azure File Storage. (VB.Net)

You can find the code on GitHub.

In this tutorial we are going to discuss about bellow topics. 
  • Connect to Azure Storage
  • List files/folders (CloudBlockBlob/CloudBlobDirectory) within a Azure File Storage
  • Create a Shared Access Signature for a Blob
  • Obtain Blob properties
  • Read content from a Blob
  • Write content to a Blob
  • Upload a Blob to Azure File Storage
  • Delete a Blob
  • Rename/move a Blob
  • Download a Blob







































If you want to find more information regarding Azure Blob Storage go here.

I have define the Azure Storage related properties in Web.Config

Make sure you add the Microsoft.Azure.Stroage.Blob through NuGet and add the dll reference.


























We are using the same File Storage Account we created earlier - Part 1.


























Bellow is a screen capture of the UI.






































You can get the connection string from "Access Keys" page.























You can get the Blob URL from "Properties" page.



















































 Imports System.IO
Imports Microsoft.WindowsAzure.Storage.Auth
Imports Microsoft.WindowsAzure.Storage.Blob

Public Class _Default
    Inherits Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

        ShowDocumentList()

    End Sub

    Private Sub ShowDocumentList()

        Dim blobContainer As CloudBlobContainer = GetStorageContainerReference()

        '
        Dim directoryUploadDocs As String = ConfigurationManager.AppSettings("storage:directoryUploadDocs")
        Dim blobDirectoryUploadDocs As CloudBlobDirectory = blobContainer.GetDirectoryReference(directoryUploadDocs)
        Dim blockBlobUploadDocs As CloudBlockBlob = blobContainer.GetBlockBlobReference(directoryUploadDocs)

        Dim blobList as IEnumerable(Of IListBlobItem) = blobDirectoryUploadDocs.ListBlobs()

        Try

            ContainerName.Text = blockBlobUploadDocs.Container.Name
            DirectoryPath.Text = blockBlobUploadDocs.Uri.AbsolutePath

            documentList.Text = ""

            documentList.Text = documentList.Text & "
"
            documentList.Text = documentList.Text & ""
            documentList.Text = documentList.Text & ""
            documentList.Text = documentList.Text & ""
            documentList.Text = documentList.Text & ""
            documentList.Text = documentList.Text & ""
            documentList.Text = documentList.Text & ""
            documentList.Text = documentList.Text & ""
            documentList.Text = documentList.Text & "
"

            For Each blobItem As IListBlobItem In blobList

                If blobItem.GetType() = GetType(CloudBlockBlob) Then

                    Dim blob As CloudBlockBlob = DirectCast(blobItem, CloudBlockBlob)

                    documentList.Text = documentList.Text & "
"

                    ' blob type
                    documentList.Text = documentList.Text & ""

                    ' file name
                    Dim fileName As String = Path.GetFileName(blob.Name)
                    documentList.Text = documentList.Text & ""

                    ' blob path
                    documentList.Text = documentList.Text & ""
                    
                    ' blob absolute path
                    documentList.Text = documentList.Text & ""

                    ' blob url
                    Dim policy As new SharedAccessBlobPolicy
                    policy.Permissions = SharedAccessBlobPermissions.Read
                    policy.SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMinutes(20)

                    Dim blobUri as String = blob.Uri.ToString() + blob.GetSharedAccessSignature(policy)

                    documentList.Text = documentList.Text & ""

                    ' blob content
                    Dim blockBlobFile As CloudBlockBlob = blobDirectoryUploadDocs.GetBlockBlobReference(fileName)
                    Dim streamReader As New StreamReader(blockBlobFile.OpenRead())

                    documentList.Text = documentList.Text & ""

                    ' blob properties
                    documentList.Text = documentList.Text & ""

                    documentList.Text = documentList.Text & "
"

                Else If blobItem.GetType() = GetType(CloudBlobDirectory) Then

                    Dim blob As CloudBlobDirectory = DirectCast(blobItem, CloudBlobDirectory)

                    documentList.Text = documentList.Text & "
"

                    ' type
                    documentList.Text = documentList.Text & ""

                    ' directory name
                    Dim directoryName As String = New DirectoryInfo(blob.Prefix).Name
                    documentList.Text = documentList.Text & ""

                    ' blob path
                    documentList.Text = documentList.Text & ""

                    ' blob absolute path
                    documentList.Text = documentList.Text & ""

                    ' blob url
                    documentList.Text = documentList.Text & ""

                    ' blob content
                    documentList.Text = documentList.Text & ""

                    ' blob properties
                    documentList.Text = documentList.Text & ""

                    documentList.Text = documentList.Text & "
"

                End If

            Next

            documentList.Text = documentList.Text & "
TypeNamePathAbsolute PathURLFile ContentFile Properties
File" documentList.Text = documentList.Text & fileName documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & blob.Name documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & blob.Uri.AbsolutePath                     documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & "View File"                     documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & "File size: " & String.Format("{0:#,###}", blob.Properties.Length) & " bytes  " documentList.Text = documentList.Text & "Last modified: " & blob.Properties.LastModified.ToString                     documentList.Text = documentList.Text & "
Folder" documentList.Text = documentList.Text & directoryName documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & blob.Prefix                     documentList.Text = documentList.Text & "" documentList.Text = documentList.Text & blob.Uri.AbsolutePath                     documentList.Text = documentList.Text & "---
" Catch ee As Exception documentList.Text = documentList.Text & "Access not possible, error: " documentList.Text = documentList.Text & ee.ToString() + "" End Try End Sub Private Function GetStorageContainerReference() As CloudBlobContainer Dim credentials As StorageCredentials = New StorageCredentials(ConfigurationManager.AppSettings("storage:accountName"), ConfigurationManager.AppSettings("storage:key")) Dim blobClient As CloudBlobClient = New CloudBlobClient(New Uri(ConfigurationManager.AppSettings("storage:uri")), credentials) Dim containerName As String = ConfigurationManager.AppSettings("storage:containerName") Dim blobContainer As CloudBlobContainer = blobClient.GetContainerReference(containerName) Return blobContainer End Function Private Sub AddFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles AddFile.Click If Page.IsPostBack = True Then Dim blobContainer As CloudBlobContainer = GetStorageContainerReference() ' Dim directoryUploadDocs As String = ConfigurationManager.AppSettings("storage:directoryUploadDocs") Dim blobDirectoryUploadDocs As CloudBlobDirectory = blobContainer.GetDirectoryReference(directoryUploadDocs) Dim blockBlobUploadDocs As CloudBlockBlob = blobContainer.GetBlockBlobReference(directoryUploadDocs) Dim fileName As String = Path.GetFileName(FindFile.PostedFile.FileName) Dim selectedBlob As CloudBlockBlob = blobDirectoryUploadDocs.GetBlockBlobReference(fileName) If (selectedBlob.Exists()) Then Message.Text = "File " + fileName + " already exists." Else Try Dim sourceStream as Stream = FindFile.PostedFile.InputStream sourceStream.Position = 0 dim cloudBlob as CloudBlockBlob = blobDirectoryUploadDocs.GetBlockBlobReference(fileName) cloudBlob.UploadFromStream(FindFile.PostedFile.InputStream) ShowDocumentList() Message.Text = "" Catch err As Exception Message.Text = "Error saving file " + fileName + " " + err.ToString() End Try End If End If End Sub Private Sub DeleteFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DeleteFile.Click Dim selectedFileName As String = DeleteFileName.Text Dim blobContainer As CloudBlobContainer = GetStorageContainerReference() ' Dim directoryUploadDocs As String = ConfigurationManager.AppSettings("storage:directoryUploadDocs") Dim blobDirectoryUploadDocs As CloudBlobDirectory = blobContainer.GetDirectoryReference(directoryUploadDocs) Dim blockBlobUploadDocs As CloudBlockBlob = blobContainer.GetBlockBlobReference(directoryUploadDocs) Dim selectedBlob As CloudBlockBlob = blobDirectoryUploadDocs.GetBlockBlobReference(selectedFileName) If (selectedBlob.Exists()) Then selectedBlob.Delete() ShowDocumentList() Message.Text = "" Else Message.Text = "File " + selectedFileName + " cannot be deleted. It doesn't exists." End If End Sub Private Sub WriteToFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles WriteToFile.Click Dim selectedFileName As String = WriteToFileName.Text Dim content As String = FileContent.Text Dim blobContainer As CloudBlobContainer = GetStorageContainerReference() ' Dim directoryUploadDocs As String = ConfigurationManager.AppSettings("storage:directoryUploadDocs") Dim blobDirectoryUploadDocs As CloudBlobDirectory = blobContainer.GetDirectoryReference(directoryUploadDocs) Dim blockBlobUploadDocs As CloudBlockBlob = blobContainer.GetBlockBlobReference(directoryUploadDocs) Dim selectedBlob As CloudBlockBlob = blobDirectoryUploadDocs.GetBlockBlobReference(selectedFileName) If (selectedBlob.Exists()) Then Try Dim streamWriter As StreamWriter = New StreamWriter(selectedBlob.OpenWrite()) streamWriter.Write(content) streamWriter.WriteLine() streamWriter.Close() ShowDocumentList() Message.Text = "" Catch ex As Exception Message.Text = "Error writing to file " + selectedFileName + " " + err.ToString() End Try Else Message.Text = "File " + selectedFileName + " doesn't exists. Content cannot be written to it." End If End Sub Private Sub RenameFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RenameFile.Click Dim oldName As String = RenameFileName.Text Dim newName As String = NewFileName.Text Dim blobContainer As CloudBlobContainer = GetStorageContainerReference() ' Dim directoryUploadDocs As String = ConfigurationManager.AppSettings("storage:directoryUploadDocs") Dim blobDirectoryUploadDocs As CloudBlobDirectory = blobContainer.GetDirectoryReference(directoryUploadDocs) Dim blockBlobUploadDocs As CloudBlockBlob = blobContainer.GetBlockBlobReference(directoryUploadDocs) Dim selectedBlobOld As CloudBlockBlob = blobDirectoryUploadDocs.GetBlockBlobReference(oldName) Dim selectedBlobNew As CloudBlockBlob = blobDirectoryUploadDocs.GetBlockBlobReference(newName) If (selectedBlobOld.Exists()) Then Try selectedBlobNew.StartCopyFromBlob(selectedBlobOld) selectedBlobOld.Delete() ShowDocumentList() Message.Text = "" Catch ex As Exception Message.Text = "Error writing to file " + newName + " " + err.ToString() End Try Else Message.Text = "File " + oldName + " doesn't exists. Content cannot be written to it." End If End Sub End ClassPrivate Sub DownloadFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DownloadFile.Click Dim selectedFileName As String = DownloadFileName.Text Dim blobContainer As CloudBlobContainer = GetStorageContainerReference() ' Dim directoryUploadDocs As String = ConfigurationManager.AppSettings("storage:directoryUploadDocs") Dim blobDirectoryUploadDocs As CloudBlobDirectory = blobContainer.GetDirectoryReference(directoryUploadDocs) Dim blockBlobUploadDocs As CloudBlockBlob = blobContainer.GetBlockBlobReference(directoryUploadDocs) Dim selectedBlob As CloudBlockBlob = blobDirectoryUploadDocs.GetBlockBlobReference(selectedFileName) If (selectedBlob.Exists()) Then Dim fileName As String = Path.GetFileName(selectedBlob.Name) Dim downloadFilePath As String = "c:\users\psam0403\desktop\" + fileName ' method 1 - DownloadToFile 'selectedBlob.DownloadToFile(downloadFilePath, FileMode.Create) ' method 2 - DownloadToStream Dim memoryStream As MemoryStream = New MemoryStream() selectedBlob.DownloadToStream(memoryStream) Dim byteArray As Byte() = memoryStream.ToArray() Dim newDownloadFile As New FileStream(downloadFilePath, FileMode.Create, FileAccess.Write) memoryStream.WriteTo(newDownloadFile) newDownloadFile.Close() memoryStream.Close() ShowDocumentList() Message.Text = "" Else Message.Text = "File " + selectedFileName + " cannot be downloaded. It doesn't exists." End If End Sub


That's it. Happy coding !!
0

Add a comment

In this tutorial I’m going to show how to:
• Create an ASP.NET Core MVC Application and Publish to Azure
• Create/Purchase a Custom Domain from a Custom Domain Provider
• Configure Custom Domain on Azure
Alt Text
You can find the PDF version of this tutorial here.
You can find all my Azure/.Net tutorials here and here.
Enjoy !!
0

Add a comment

About Me
About Me
Blog Archive
Loading
Dynamic Views theme. Powered by Blogger. Report Abuse.