由于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第一次亲密接触的更多相关文章
-
【阿里云产品公测】与云引擎ACE第一次亲密接触
阿里云用户:林哥神话 公测当然是第一次了.这个第一次亲密接触,但话又说回来对ACE我一直都不是那感兴趣的,但是看到阿里介绍还是那般神奇,再加上200无代金券来更加给力.最后就申请了这次公测. 平时一直 ...
-
第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触
http://blog.csdn.net/visioncat/article/details/1596576 GCC for Win32 开发环境介绍(5) 第四章 跨平台图像显示库——SDL 第一节 ...
-
多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
-
Linux就是这个范儿之第一次亲密接触(3)
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明.否则将追究法律责 1.4 返璞归真的命令行 有一种说法,现代计算机不是靠电力驱动,而是靠“鼠标”.多少应用程序的界面需 ...
-
我和Python的第一次亲密接触 - 零基础入门学习Python001
我和Python的第一次亲密接触 让编程改变世界 Change the world by program 小甲鱼经常说,学习一门编程语言就是要深入其中,要把编程语言想象为你的女朋友你的情人,这样你学习 ...
-
第一次亲密接触MSF
第一次亲密接触MSF Metasploit Framework介绍 Metasploit是一款开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新.被安全社区冠以“可以黑掉整个宇宙”之名的强 ...
-
[OS] 多线程--第一次亲密接触CreateThread与_beginthreadex本质区别
转自:http://blog.csdn.net/morewindows/article/details/7421759 本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_be ...
-
Linux认知之旅【01 与Linux第一次亲密接触】!
一.搜索LINUX,了解它的前世今生! linux很厉害,应用在很多方面,我知道有超算.IOT.树莓派. 而且好多开发人员都在用这个系统.linux作为服务器使用,常年不用重启,不宕机,很少受病毒影响 ...
-
Linux就是这个范儿之第一次亲密接触(2)
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明.否则将追究法律责 1.2 不一样的图形操作 几乎所有Linux的新用户都会认为Linux的图形界面是相当的绚丽又多彩. ...
随机推荐
-
Bootstrap之导航条
基本导航条 <!-- navbar-inverse相反颜色风格 --> <!-- navbar-static-top去除圆角 --> <!-- navbar-fixed- ...
-
Linux Shell 批量更换文件名或后缀名
把下列所有.c的文件名修改为.cc rename .c .cc *.c
-
OC-字典
1.所有的key都是一个字符串,键 值是成对出现的.且都不能为空,非要为空要使用NSnull.字典是通过key来存取值的,key valu必须成对出场 2.字典是有键-值的数据组合,通过key查找对于 ...
-
微软Office与金山WPS Office有何私密关系?
新浪科技讯,9月1日午间消息,国家工商总局在其官网公布消息称.对微软公司副总裁陈实进行反垄断调查询问,要求微软就其综合情况以及企业反映的微软公司Windows操作系统和Office办公软件相关信息没有 ...
-
WebApi Help Pages
如何新建Help Pages在此不多复述,网上很多: https://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/ ...
-
python语言基础汇总
注释 代码中添加注释是一个良好的编程习惯,python语言的注释才用井号'#'作为注释开头的,可以是任意内容,解释器会忽略掉这部分内容.其他每一行都是语句,当语句以冒号':'结尾时,缩进的语句视为代码 ...
-
InnoDB Insert Buffer(插入缓冲)
InnoDB Insert Buffer(插入缓冲) 每个存储存储引擎自身都有自己的特性(决定性能以及更高可靠性),而InnoDB的关键特性有: 插入缓冲(Insert Buffer)-->Ch ...
-
Docker最全教程——从理论到实战
Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) Docker最全教程—— ...
-
bug的一些事
Bug级别:(由高到低) 1.critical:系统直接崩溃,瘫痪.无法正常打开使用产品 2.Block:逻辑出现严重问题,流程卡住,无法进行下一步 3.Major:部分功能出现闪退,功能没有实现,但 ...
-
Nginx 错误日志配置
1.Nginx错误日志信息介绍: error_log的语法格式及参数说明: error_log file level; 关键字 日志文件 错误日志级别 其中,关键字 ...