跟我学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看到我们我们上传得文件

打完收工!

时间: 2024-10-07 18:34:30

跟我学Windows Azure 五 使用Cloub Service连接Blob Service完成图片的上传的相关文章

跟我学Windows Azure 四 Cloud Service中的WebRole与WorkRole,及他们之间的通信

Cloud Service 中WebRole就相当与我们的WebSite,而WorkRole相当与我们在服务器上写了个Windows Service,站在高可用的角度上来讲,Cloud Service要优于WebSite,拿个例子来说,我们上传个数据,数据需要入库,通常website需要提交数据,等待响应,这个时候如果并发量大,系统响应时间会很长.如果使用Cloud Service就不存在这个问题,WebRole只负责把数据提交上来,而对数据的处理入库则可以提交给WorkRole来处理,中间可以

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件

原文:重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 [源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之通信的新特性 下载数据(显示下载进度,将下载数据保存到本地) 上传数据(显示上传进度) 上传文件 示例HTTP 服务端WebServer/HttpDemo.aspx.cs /* * 用于响应 http 请求 */ using System; using System.IO;

跟我学Windows Azure 三 使用vs2013创建windows azure web site

首先我们需要登陆我们的windows azure上,然后访问 https://manage.windowsazure.cn/publishsettings/index 他会让我们下载我们的订阅证书文件.我们把他保存到本地的电脑磁盘中. 下来,我们打开我们vs2013创建项目,选择cloud选择asp.net web应用程序.解决方案名称及项目名称都先起名为Teacher. 下来我们选择创建一个Web Forms的一个应用程序,然后选择管理订阅. 然后我们选择证书,这里我们使用导入的方法来添加我们

跟我学Windows Azure 使用SQL Azure创建数据库服务器,创建数据库,创建表

登陆Windows Azure门户 输入我们上一节课所注册的帐号及密码,点击登陆. 选择SQL 数据库,选择服务器 选择创建数据库服务器 设置访问数据库服务器的登陆帐号及密码 点击确定完成数据库服务器的创建. 然后我们选择我们所创建的数据库服务器 选择创建数据库. 输入我们的数据库名称,这里我的数据库名称为Teacher,因为是试用帐号,我选择服务层为BASIC最低标准吧. 然后点确定完成数据库的创建. 下来我们选择数据库的菜单.可以看到我们刚才创建的数据库. 然后我们点击我们刚创建的数据库.

跟我学Windows Azure 创建Windows Azure试用账号

我在网上看了很多教程,很大部分都是申请的是国外或者是香港的试用账号,而国内是由世纪互联所代理的,他的申请方式与VS2013的部署设置或多或少还是有些出入,这里我先跟大家一起过一下,在国内如何申请一个windows azure的试用账号. 首先我们访问www.windowsazure.cn这个域名,这个是我们国内的,香港和国外访问的是www.windowsazure.com.然后再首页中点击我要试用这个按钮. 然后我们点击申请试用的按钮 这里我们填写申请的个人信息,域名这里可以自己随便定义一个.

windows azure平台虚拟机无法远程连接解决方法

azure平台支持windows和linux两种操作系统的虚机,这里只说windows虚拟机. 提示: azure平台禁止ping. psping工具 http://technet.microsoft.com/en-us/sysinternals/jj729731.aspx 订阅管理平台 https://manage.windowsazure.cn 在进行该问题探讨前,请确保 1,确认主机域名或IP输入是否正确? 2,确认输入的端口是否正确? 3,确认通过VPN连接还是公网连接? 如果通过vpn

第七十五天上课 php注册登入审核和文件上传

文件上传 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文件上传</title> <?php if(!(empty($_FILES['file']) || empty($_POST['submit']))) { $urls="./my-img/".$_FILES['file']['name']; /

Windows Azure 免费初体验 - 创建部署网站

前几天在看到有个学Windows Azure课程,送Windows Azure的活动,课程地址:http://www.microsoftvirtualacademy.com/ 在活得体验资格后,就迫不及待的捣鼓了下.在这里就介绍一下如何将自己的网站部署到Windows Azure上. 首先介绍下本机环境: -- 安装了Visual Studio 2013(自带数据库设计工具;虽然安装了SQL Server 2008,但是还是无法连接 SQL Server 2014) -- 安装了Git 下面就将

连接到Windows Azure Point to Site VPN

Windows Azure支持两种模式的VPN接入: Site to Site,接入端需要有固定的公网IP地址,用于连接局域网和Windows Azure的虚拟网络. Point to Site,客户端使用Windows SSTP拨号,只支持Windows操作系统.用于开发测试和运维. 通过Point to Site VPN连接到Windows Azure,可以有效的提升系统安全——减少对外开放的端口数量,只保留应用程序的对外服务端口而关闭系统维护端口.例如:一个Web Server,只开放80