Downloading WORD and EXCEL files from Windows Azure Storage in a ASP.NET Web Role
While opening Microsoft Office WORD and EXCEL Files before
saving from Windows Azure Storage in ASP.NET Web Role, a few partners reported
the following Error:
The file <File name> cannot be opened because there are problem with the content. |
Note: When downloading PDF and other image files the problem
did not occurred and it occurred only with WORD & Excel files.
Following is the correct code to solve this
problem:
C# Code:
using System.IO; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.StorageClient; using Microsoft.WindowsAzure.ServiceRuntime;
namespace WebRole { public partial class _Default : System.Web.UI.Page { private static CloudStorageAccount account; private static CloudBlobClient blobClient; private static CloudBlobContainer container; private static CloudBlob blob;
protected void Page_Load(object sender, EventArgs e) { DownloadBlob("HelloWorld.docx"); }
public void DownloadBlob(string blobName) { account = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("DataConnectionString")); blobClient = account.CreateCloudBlobClient(); container = blobClient.GetContainerReference("<YOUR_CONTAINER_NAME>"); blob = container.GetBlobReference(blobName); MemoryStream memStream = new MemoryStream(); blob.DownloadToStream(memStream); Response.ContentType = blob.Properties.ContentType; Response.AddHeader("Content-Disposition", "Attachment; filename=" + blobName.ToString()); Response.AddHeader("Content-Length", blob.Properties.Length.ToString()); Response.BinaryWrite(memStream.ToArray()); } } } |
VB.NET Code:
Imports System.IO Imports Microsoft.WindowsAzure Imports Microsoft.WindowsAzure.StorageClient Imports Microsoft.WindowsAzure.ServiceRuntime
Public Class _Default Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load DownloadBlob("HelloWorld.docx"); End Sub
Private Sub DownloadBlob(ByVal blobName As String, ByVal containerName As String) Dim account As CloudStorageAccount Dim blobClient As CloudBlobClient Dim container As CloudBlobContainer account = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("DataConnectionString")) blobClient = account.CreateCloudBlobClient() container = blobClient.GetContainerReference("<Your_Container_Name>") Dim blob As CloudBlob blob = container.GetBlobReference(blobName) 'Downloads a stream. Errors for xls and Word. Dim ms As New MemoryStream() Using ms blob.DownloadToStream(ms) Response.ContentType = blob.Properties.ContentType Response.AddHeader("Content-Disposition", "Attachment; filename=" & blobName) Response.AddHeader("Content-Length", blob.Properties.Length) Response.BinaryWrite(ms.ToArray()) End Using End Sub
End Class |