跟我學Windows Azure 五 使用Cloub Service連接Blob Service完成圖片的上傳
首先,我們創建一個云服務項目,用來演示我們的blob存儲

下來我們修改我們我們云服務的名字


我們需要添加一個空的WebForm的項目

點擊完成,我們可以看到我們的解決方案已經添加完成

下來我們需要添加一個實體類,用來存儲文件的信息.


下面是我們實體類的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace BlobWebRole
{
public class ImageEn
{
public string BlobName { get; set; }
public Uri FileUri { get; set; }
public string FileName { get; set; }
public long Length { get; set; }
public string FolderName { get; set; }
public bool IsReadOnly { get; set; }
public bool IsExists { get; set; }
public string FullFileName { get; set; }
public string ExtendName { get; set; }
public string CreatorName { get; set; }
public DateTime CreateTime { get; set; }
}
}
下來我們需要添加一個頁面窗體,用來進行圖片的顯示和上傳


下面是Default.aspx前臺代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="BlobWebRole.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div><!--上傳圖片-->
<asp:Label ID="lblFilePath" Text="上傳文件" AssociatedControlID="fileUploadControl"
runat="server" />
<asp:FileUpload ID="fileUploadControl" runat="server" />
<asp:RequiredFieldValidator ID="filUploadValidator" ControlToValidate="fileUploadControl"
ValidationGroup="fileInfoGroup" ErrorMessage="請選擇文件!" runat="Server">
</asp:RequiredFieldValidator>
<br />
<asp:Label ID="lblFileName" Text="文件名稱:" AssociatedControlID="txtFileName" runat="server" />
<asp:TextBox ID="txtFileName" runat="server" />
<asp:RequiredFieldValidator ID="fileNameValidator" ControlToValidate="txtFileName"
ValidationGroup="fileInfoGroup" ErrorMessage="請輸入文件名!" runat="Server">
</asp:RequiredFieldValidator>
<br />
<asp:Label ID="lblCreator" Text="創 建 者:" AssociatedControlID="txtCreator" runat="server" />
<asp:TextBox ID="txtCreator" runat="server" />
<asp:RequiredFieldValidator ID="submitterValidator" ControlToValidate="txtCreator"
ValidationGroup="fileInfoGroup" ErrorMessage="請輸入創建者!" runat="Server">
</asp:RequiredFieldValidator>
<br />
<asp:Button ID="btnSave" Text="保存" CausesValidation="true" ValidationGroup="fileInfoGroup"
runat="server" OnClick="btnSave_Click" />
<br />
<br />
<asp:Label ID="statusMessage" runat="server" />
</div>
<div><!--列表顯示圖片-->
<asp:GridView ID="fileView" AutoGenerateColumns="false" DataKeyNames="BlobName" runat="server"
OnRowCommand="RowCommandHandler">
<Columns>
<asp:ButtonField Text="Delete" CommandName="DeleteItem" />
<asp:HyperLinkField HeaderText="Link" DataTextField="FileName" DataNavigateUrlFields="FileUri" />
<asp:BoundField DataField="CreatorName" HeaderText="Created by" />
<asp:BoundField DataField="FolderName" HeaderText="FolderName" />
<asp:BoundField DataField="IsReadOnly" HeaderText="IsReadOnly" />
<asp:BoundField DataField="IsExists" HeaderText="IsExists" />
<asp:BoundField DataField="FullFileName" HeaderText="FullFileName" />
<asp:BoundField DataField="ExtendName" HeaderText="ExtendName" />
<asp:BoundField DataField="CreateTime" HeaderText="CreateTime" />
</Columns>
</asp:GridView>
</div>
</div>
</form>
</body>
</html>
下來添加我們Default.aspx.cs后臺代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System.IO;
using System.Collections.Specialized;
namespace BlobWebRole
{
public partial class Default : System.Web.UI.Page
{
private CloudBlobClient _BlobClient = null;
private CloudBlobContainer _BlobContainer = null;
private const string conContainerAddress = "imagefiles";
private const string conConfigStorageSetting = "BlobConnectionString";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.EnsureContainerExists();
DisplayFileList();
}
}
private void EnsureContainerExists()
{
var container = GetContainer();
// 檢查container是否被創建,如果沒有,創建container
container.CreateIfNotExists();
var permissions = container.GetPermissions();
//對Storage的訪問權限是可以瀏覽Container
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);
}
private CloudBlobContainer GetContainer()
{
//獲取ServiceConfiguration.cscfg配置文件的信息
var account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("BlobConnectionString"));
var client = account.CreateCloudBlobClient();
//獲得BlobContainer對象
return client.GetContainerReference(conContainerAddress);
}
protected void btnSave_Click(object sender, EventArgs e)
{
//獲取擴展名
string extension = System.IO.Path.GetExtension(fileUploadControl.FileName);
//獲得BlobContainer對象并把文件上傳到這個Container
var blob = this.GetContainer().GetBlockBlobReference(Guid.NewGuid().ToString() + extension);
blob.UploadFromStream(fileUploadControl.FileContent);
////設置元數據到Blob
blob.Metadata["FileName"] = txtFileName.Text;
blob.Metadata["Length"] = fileUploadControl.FileContent.Length.ToString();
DirectoryInfo di = new DirectoryInfo(string.Format("{0}\\", conContainerAddress));
blob.Metadata["FolderName"] = di.Name;
FileInfo file = new FileInfo(fileUploadControl.PostedFile.FileName);
blob.Metadata["IsReadOnly"] = file.IsReadOnly.ToString();
blob.Metadata["IsExists"] = file.Exists.ToString();
blob.Metadata["FullFileName"] = file.FullName;
blob.Metadata["ExtendName"] = file.Extension;//extension
blob.Metadata["CreatorName"] = txtCreator.Text;
blob.Metadata["CreateTime"] = DateTime.Now.ToShortTimeString();
blob.SetMetadata();
//設置屬性
blob.Properties.ContentType = fileUploadControl.PostedFile.ContentType;
blob.SetProperties();
//顯示列表
DisplayFileList();
}
/// <summary>
/// 列表
/// </summary>
private void DisplayFileList()
{
var blobs = this.GetContainer().ListBlobs(null, false, BlobListingDetails.Metadata, null, null).OfType<CloudBlockBlob>();
var filesList = new List<ImageEn>();
//查詢
foreach (var blobItem in blobs)
{
//實體字段
filesList.Add(new ImageEn()
{
FileUri = blobItem.Uri,
BlobName=blobItem.Name,
FileName = txtFileName.Text,
Length = long.Parse(blobItem.Metadata["Length"]),
FolderName = blobItem.Metadata["FileName"],
IsReadOnly = bool.Parse(blobItem.Metadata["IsReadOnly"]),
IsExists = bool.Parse(blobItem.Metadata["IsExists"]),
FullFileName = blobItem.Metadata["FullFileName"],
ExtendName = blobItem.Metadata["ExtendName"],
CreatorName = blobItem.Metadata["CreatorName"],
CreateTime = DateTime.Parse(blobItem.Metadata["CreateTime"])
});
}
//綁定列表
fileView.DataSource = filesList;
fileView.DataBind();
}
protected void RowCommandHandler(object sender, GridViewCommandEventArgs e)
{
//刪除
if (e.CommandName == "DeleteItem")
{
// 獲取索引
var index = Convert.ToInt32(e.CommandArgument);
var blobName = fileView.DataKeys[index].Value.ToString();
//Get the container
var blob = this.GetContainer().GetBlockBlobReference(blobName);
blob.Delete();
}
//更新列表
DisplayFileList();
}
}
}
我們登陸WindowsAzure管理門戶去添加一個存儲.

我們添加名為teacherblob的存儲服務

下來我們雙擊我們Studio2013中的云服務,點擊設置,去設置他所要連接的設置

我們把連接字符串的名稱叫做BlobConnectionstring,然后選擇類型為連接字符串,然后值那里我們選擇我的訂約,然后會自動帶出,我們剛才在Windows azure上建立的blob,選擇他就可以了.


然后我們選擇我們的BlobStorageDemo進行調試

我們在頁面中輸入需要上傳得圖片及對應的屬性.點擊保存按鈕,保存按鈕成功后,列表中會顯示我們的圖片文件信息.

下來我們可以在我們studio中看到我們存儲的文件

我們同時也可以使用azure storage explorer看到我們我們上傳得文件

打完收工!
浙公網安備 33010602011771號