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
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.
Bellow is a screen capture of the UI.
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 & "
Type Name Path Absolute Path URL File Content File 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 !!
Add a comment