由于azure上各个云服务都是分开的,所以当一个地方生成文件后,我在别的地方想要读取他就变得困难,不过azure上面有解决方案,就是azure blob storage。

在现有的订阅账号下,新建一个存储blob,分私有和公共,私有的为私有存储,外部链接无法访问,公共则可以在外部直接通过链接进行存储内容的访问。

首先在cloud service和portal配置文件中均需添加一个key为storageAccount,value则为azure上的blobend,queueend,tableend,以及他的thumbprint

在configuration文件中配置改存储名称。

 public static string EmailFileContainer
{
get
{
return "email-response-save";
}
}

建立一个BlobClient类,用来执行blob事件。

 public class BlobClient
{
private static CloudBlobClient _cloudBlobClient; static BlobClient()
{
_cloudBlobClient = CloudStorageAccount.Parse(Config.CloudStorageAccount).CreateCloudBlobClient();
_cloudBlobClient.RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(), );
} /// <summary>
/// Get file from blob
/// </summary>
/// <param name="containerName"></param>
/// <param name="blobName"></param>
/// <param name="blobPath"></param>
public static void GetBlob(string containerName, string blobName, string blobPath)
{
var container = _cloudBlobClient.GetContainerReference(containerName); var blob = container.GetBlockBlobReference(blobName);
var mode = System.IO.FileMode.Create;
blob.DownloadToFileAsync(blobPath, mode); return;
} /// <summary>
/// Add file to blob
/// </summary>
/// <param name="containerName"></param>
/// <param name="blobName"></param>
/// <param name="blobPath"></param>
/// <param name="blobFileName"></param>
public static void AddBlob(string containerName, string blobName, string blobPath,string blobFileName)
{
var container = _cloudBlobClient.GetContainerReference(containerName);
container.CreateIfNotExists(); var blob = container.GetBlockBlobReference(blobName);
var mode = System.IO.FileMode.Open;
blob.UploadFromFileAsync(blobPath+blobFileName, mode); return;
} public static void DeleteBlob(string containerName, string blobName)
{
var container = _cloudBlobClient.GetContainerReference(containerName);
container.CreateIfNotExists(); var blob = container.GetBlockBlobReference(blobName);
blob.DeleteIfExistsAsync(); return;
} public static void DeleteBlobContainer(string containerName)
{
var container = _cloudBlobClient.GetContainerReference(containerName);
container.CreateIfNotExists(); foreach (var item in container.ListBlobs(null, false))
{
foreach (var item1 in ((CloudBlobDirectory)item).ListBlobs())
{
foreach (var item2 in ((CloudBlobDirectory)item1).ListBlobs())
{
((CloudBlockBlob)item2).DeleteIfExistsAsync();
}
}
}
}
}

执行写入blob storage步骤。

BlobClient.AddBlob(Config.EmailFileContainer, "MailExportTotalImage/"+ imgName, location, imgName);

读取blob storage中的文件。

BlobClient.GetBlob(Config.EmailFileContainer, "MailExportAttachment1/" + sFileName, uploadPath + sFileName);

将内存流数据存入TXT。

var fn = DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
byte[] bs = stream.ToArray();
String contentStr = System.Text.Encoding.UTF8.GetString(bs);

BlobClient.AddBlob(Config.FileContainer, fn, contentStr);

若要创建公共可访问文件的链接,需在对应云服务的configuration文件中申明一个设置名称。

<ConfigurationSettings>
<!--Local-->
<Setting name="aaaa" value="bbbbbbbbbbb" />
.
.
.
<Setting name="EmailBlobStorage" value="http(s)://xxx.blob.core.chinacloudapi.cn/email-response-save/" />
</ConfigurationSettings>

核心configuration文件中建立一个指向云服务configuration特定设置名称的属性。

public static string EmailBlobStorage
{
get
{
return CloudConfigurationManager.GetSetting("EmailBlobStorage");
}
}

使用:

var location = Config.EmailBlobStorage;
var imgsrc = location + "MailExportTotalImage/" + string.Format("{0:yyyy-MM-dd}", DateTime.Today.ToGmt8()) + _title + ".png";

blob storage第一次亲密接触的更多相关文章

  1. 【阿里云产品公测】与云引擎ACE第一次亲密接触

    阿里云用户:林哥神话 公测当然是第一次了.这个第一次亲密接触,但话又说回来对ACE我一直都不是那感兴趣的,但是看到阿里介绍还是那般神奇,再加上200无代金券来更加给力.最后就申请了这次公测. 平时一直 ...

  2. 第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触

    http://blog.csdn.net/visioncat/article/details/1596576 GCC for Win32 开发环境介绍(5) 第四章 跨平台图像显示库——SDL 第一节 ...

  3. 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

    本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...

  4. Linux就是这个范儿之第一次亲密接触(3)

    原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明.否则将追究法律责 1.4 返璞归真的命令行 有一种说法,现代计算机不是靠电力驱动,而是靠“鼠标”.多少应用程序的界面需 ...

  5. 我和Python的第一次亲密接触 - 零基础入门学习Python001

    我和Python的第一次亲密接触 让编程改变世界 Change the world by program 小甲鱼经常说,学习一门编程语言就是要深入其中,要把编程语言想象为你的女朋友你的情人,这样你学习 ...

  6. 第一次亲密接触MSF

    第一次亲密接触MSF Metasploit Framework介绍 Metasploit是一款开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新.被安全社区冠以“可以黑掉整个宇宙”之名的强 ...

  7. [OS] 多线程--第一次亲密接触CreateThread与_beginthreadex本质区别

    转自:http://blog.csdn.net/morewindows/article/details/7421759 本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_be ...

  8. Linux认知之旅【01 与Linux第一次亲密接触】!

    一.搜索LINUX,了解它的前世今生! linux很厉害,应用在很多方面,我知道有超算.IOT.树莓派. 而且好多开发人员都在用这个系统.linux作为服务器使用,常年不用重启,不宕机,很少受病毒影响 ...

  9. Linux就是这个范儿之第一次亲密接触(2)

    原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明.否则将追究法律责 1.2 不一样的图形操作 几乎所有Linux的新用户都会认为Linux的图形界面是相当的绚丽又多彩. ...

随机推荐

  1. 阻止事件冒泡两种方式:event.stopPropagation();和return false;

    jQuery提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function (event) { ...

  2. yii2 使用twig 模板引擎

    yii2 默认使用PHP 和html 混合的方式来写视图层,但我个人还是喜欢纯模板语言的方式.而且已经非常习惯使用twig的语法,最近想使用yii2进行开发,所以还是选择使用twig视图引擎. git ...

  3. [工具开发] 一信通 Web 短信发送客户端

    一.简介 为了协助公司运营部对几家短信平台进行测试,我根据各自的接口文档编写了几个简单的短信发送客户端: 下面是一信通 Web 短信发送客户端,使用 HTTP GET 方法. 二.效果图 1. 首页 ...

  4. 不重启程序使用最新版package

    相信很多使用python者都对reload方法比较熟悉了,通过不间断地reload可以实现某一module的热更新,主要就能在不重启应用的情况下实现部分模块的更新.但这种方法仅限于reload当前工作 ...

  5. PLSQL转义字符

    http://blog.csdn.net/cunxiyuan108/article/details/5800800

  6. 整理: Android HAL

    这篇文章整理来自http://bbs.chinaunix.net/thread-3675980-1-1.html 在论坛中看到的Android HAL讨论,有个ID描述的比较清楚,摘录如下: temp ...

  7. Raising Modulo Numbers

    Description People are different. Some secretly read magazines full of interesting girls' pictures, ...

  8. ubuntu下python连接mysql

    apt-get install python-mysqldb

  9. Spark JdbcRDD 简单使用

    package org.apache.spark.sql.sources import org.apache.spark.SparkContext import java.sql.{ResultSet ...

  10. sql 2008 R2添加对MySql的远程服务器链接

    (1).我的sql 2008 R2所在的系统为Windows server 2008 *64 (2).MySQL所在的系统为Windows server 2003 *86 我想要实现的是在sql 20 ...