blob storage第一次亲密接触
由于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的图形界面是相当的绚丽又多彩. ...
随机推荐
- curl的POST与GET方法
$url = '127.0.0.1/shang/bb.php'; $data = array('name'=>'赵猛','age'=>'23'); print_r(get($u ...
- HighCharts使用心得
HighCharts使用心得 前言: 之前很早的一个项目中使用过highcharts,感觉挺方便的,图表类型也比较丰富,而且还支持数据的下钻,但是如果投入商业使用的话还会有一些版权的问题,所以后来就使 ...
- [系统开发] Django Admin上传图片简单校验
我的 models里有个ImageField字段,用来保存用户头像,希望通过Django Admin上传时校验头像大小,如果太大就报错,并且不保存. 网上有不少方法,有的通过第三方软件实现,有的通过自 ...
- Orcal学习
sqlplus有几种登陆方式 比如:1.C: > sqlplus "/as sysdba" --以操作系统权限认证的oracle sys管理员登陆2.C: > sqlp ...
- C++中引用的本质
一般的教材上讲到引用时,都是说"引用是对象的一个别名".我认为这种定义是不清晰的,不利于初学者理解引用.至少我自己曾经被这个定义困扰了一段时间.到底什么是"别名" ...
- 1 、Linux-Rhel6终端介绍-Shell提示符
1.Linux 终端介绍 tty-控制台终端: RHEL6 tty1-tty6 tty就是图形界面 从图形界面切换到字符界面: ctrl+shift+alt +F2~F6 从字符界面切换图形或字符: ...
- 整合Apache+PHP教程
首先修改Apache的配置文件,让Apache支持解析PHP文件,Apache配置文件在Apache安装目录的conf目录下的httpd.conf,打开此文件, 找到#LoadModule,在这个下面 ...
- Flash插件地址
Flash插件地址: http://get.adobe.com/cn/flashplayer/存档版本地址: http://helpx.adobe.com/flash-player/kb/archiv ...
- SQL中使用WITH AS提高性能,使用公用表表达式(CTE)简化嵌套SQL
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候, ...
- Apache配置简单http认证
首先要说明的是这种认证是不安全的,密码是明文传输,因此很容易被各种嗅探软件嗅探到密码,只能用于简单的认证.今天上午把ownCloud卸载了,这玩 意儿中看不中用啊,原来10M的访问速度被限制成了几百K ...