简单总结下关于blob的图片上传
我是从一本书上看到了Azure Blob,然后在网上浪了一会儿,发现了这篇文章,里面他已经把重点的则重地方讲完了,“飞机票:http://www.cnblogs.com/sparkdev/p/6441421.html#commentform”
但是对于我来说,一开始还是有点困惑的。里面的文章已经讲得很详细了,只是在做这个事情之前,你需要引入一个package(我为了找这个package也是煞费苦心,后来才发现前一章节有讲到。。。)
就是
Install-Package WindowsAzure.Storage
安装完成后大概就是这个样子喽

好像还有些别的东西。。嗯。。。不管了。
在上面那个地址中已经介绍了添加文件,删除文件啊一些基本操作,噢,对,千万别忘记下一个这个软件,
链接: http://pan.baidu.com/s/1c15dhfi 密码: rcar
原地址只有外网才可以访问的到,所以我放到了百度云里面,原作者应该不介意把。。。介意的话告诉我我去立马删除。。。
这个软件很好用的,而且so easy,点那个像插头一样的图标,然后就尽情的下一步吧~
我把原作者写的几个示例集合到了一个方法中(也许这个方法还有很多需要改进的地方。。)
我贴到这里来给大家用,这样我走的坑,大家就尽量别再掉进去了
public class BlobCommon
{
private CloudBlobContainer container; public BlobCommon(string connectionUrl,string containerName)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionUrl);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
container = blobClient.GetContainerReference(containerName);
container.CreateIfNotExists();
} public BlobCommon()
{
try
{
var connectionUrl = ConfigurationManager.ConnectionStrings["BlobConnectionUrl"].ConnectionString;
var containerName = ConfigurationManager.AppSettings["BlobContainer"].ToString();
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionUrl);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
container = blobClient.GetContainerReference(containerName);
container.CreateIfNotExists();
}
catch (Exception ex)
{
} } public bool SaveImage(string imageName,string file)
{
try
{
CloudBlockBlob blockBlob = container.GetBlockBlobReference(imageName);
using (var fileStream = System.IO.File.OpenRead(file))
{
// 这是一个同步执行的方法
blockBlob.UploadFromStream(fileStream);
}
return true;
}
catch (Exception ex)
{
return false;
}
} public bool SaveImage(string imageName, byte[] imageData)
{
try
{
CloudBlockBlob blockBlob = container.GetBlockBlobReference(imageName);
blockBlob.UploadFromByteArray(imageData,, imageData.Length);
//using (var fileStream = System.IO.File.OpenRead(file))
//{
// // 这是一个同步执行的方法
// blockBlob.UploadFromStream(fileStream);
//}
return true;
}
catch (Exception ex)
{
return false;
}
} public List<SupervisorReportImageModel> GetBlobImageList()
{
try
{
var list = new List<SupervisorReportImageModel>();
foreach (IListBlobItem item in container.ListBlobs(null, false))
{
if (item.GetType() == typeof(CloudBlockBlob))
{
CloudBlockBlob blob = (CloudBlockBlob)item;
// todo something
list.Add(new SupervisorReportImageModel()
{
Name = blob.Name.ToString(),
Url = blob.SnapshotQualifiedStorageUri.SecondaryUri.ToString()
});
}
else if (item.GetType() == typeof(CloudAppendBlob))
{
CloudAppendBlob appendBlob = (CloudAppendBlob)item;
// todo something
list.Add(new SupervisorReportImageModel()
{
Name = appendBlob.Name.ToString(),
Url = appendBlob.SnapshotQualifiedStorageUri.SecondaryUri.ToString()
});
}
else if (item.GetType() == typeof(CloudPageBlob))
{
CloudPageBlob pageBlob = (CloudPageBlob)item;
// todo something
list.Add(new SupervisorReportImageModel()
{
Name = pageBlob.Name.ToString(),
Url = pageBlob.SnapshotQualifiedStorageUri.SecondaryUri.ToString()
});
}
else if (item.GetType() == typeof(CloudBlobDirectory))
{
CloudBlobDirectory directory = (CloudBlobDirectory)item;
// todo something
list.Add(new SupervisorReportImageModel()
{
Name = directory.Uri.ToString(),
Url = directory.StorageUri.SecondaryUri.ToString()
});
}
}
return list;
}
catch (Exception ex)
{
return null;
}
} public bool DownloadImage(string imageName,string saveUrl)
{
try
{
// 创建名称为 mypicture.png 的 Blob 对象的引用。
CloudBlockBlob blockBlob = container.GetBlockBlobReference(imageName);
// 把文件保存到本地。
using (var fileStream = System.IO.File.OpenWrite(saveUrl))
{
blockBlob.DownloadToStream(fileStream);
}
return true;
}
catch (Exception ex)
{
return false;
}
} public bool SetupBlobRole()
{
try
{
BlobContainerPermissions permissions = container.GetPermissions();
// Container 中的所有 Blob 都能被访问
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);
return true;
}
catch (Exception ex)
{
return false;
}
} public bool DeleteImage(string imageName)
{
try
{
CloudBlockBlob blockBlob = container.GetBlockBlobReference(imageName);
blockBlob.DeleteIfExists();
return true;
}
catch (Exception ex)
{
return false;
}
} public SupervisorReportImageModel GetBlobImageByImageName(string imageName)
{
try
{
List<IListBlobItem> imageData = container.ListBlobs(imageName, false).ToList();
foreach (var item in imageData)
{
if (item.GetType() == typeof(CloudBlockBlob))
{
CloudBlockBlob blob = (CloudBlockBlob)item;
// todo something
return new SupervisorReportImageModel()
{
Name = blob.Name.ToString(),
Url = blob.SnapshotQualifiedStorageUri.SecondaryUri.ToString()
};
}
else if (item.GetType() == typeof(CloudAppendBlob))
{
CloudAppendBlob appendBlob = (CloudAppendBlob)item;
// todo something
return new SupervisorReportImageModel()
{
Name = appendBlob.Name.ToString(),
Url = appendBlob.SnapshotQualifiedStorageUri.SecondaryUri.ToString()
};
}
else if (item.GetType() == typeof(CloudPageBlob))
{
CloudPageBlob pageBlob = (CloudPageBlob)item;
// todo something
return new SupervisorReportImageModel()
{
Name = pageBlob.Name.ToString(),
Url = pageBlob.SnapshotQualifiedStorageUri.SecondaryUri.ToString()
};
}
else if (item.GetType() == typeof(CloudBlobDirectory))
{
CloudBlobDirectory directory = (CloudBlobDirectory)item;
// todo something
return new SupervisorReportImageModel()
{
Name = directory.Uri.ToString(),
Url = directory.StorageUri.SecondaryUri.ToString()
};
}
}
return null;
}
catch (Exception ex)
{
return null;
}
}
}
----------------------------------------------------我是分割线-------------------------------------------------------
写完之后我不由得有一些困惑,我看到其中有一些方法可以创建文件夹啊什么的,可是暂时还不会用,还需要学习一下子。或者有老司机教教我,给我一个使用文档也可以啦~
我现在有一个最大的难题,就是文件权限的问题。在文档中,我看到了可以获取权限的方法,可是,如果我的图片,提供url出来之后,我怎么才能使用这个权限去下载图片呢。。。
简单总结下关于blob的图片上传的更多相关文章
- springMVC框架下——通用接口之图片上传接口
我所想要的图片上传接口是指服务器端在完成图片上传后,返回一个可访问的图片地址. spring mvc框架下图片上传非常简单,如下 @RequestMapping(value="/upload ...
- vue下实现input实现图片上传,压缩,拼接以及旋转
背景 作为一名前端工作人员,相信大家在开发系统的时候,经常有遇到需要这么一种需求,就是需要为用户保存上传的图片,很多小白遇到这个问题的时候,都会虎躯一震,以为会是一个棘手的问题,当你读完这篇文章的时候 ...
- yii2.0用gii自动补全代码做的简单增删改查,以及图片上传和展示
首先已经用gii根据model层生成了控制器,模型,视图层. 表结构为如图所示:表名为zhoukao1,
- H5拍照、选择图片上传组件核心
背景 前段时间项目重构,改成SSR的项目,但之前用的图片选择上传组件不支持SSR(server-side-render).遂进行了调研,发现很多的工具.但有的太大,有的使用麻烦,有的不满足使用需求.决 ...
- 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
- 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
- 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,
一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ...
- .net mvc + layui做图片上传(二)—— 使用流上传和下载图片
摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件.这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的 ...
- CKEditor5 + vue2.0 自定义图片上传、highlight、字体等用法
因业务需求,要在 vue2.0 的项目里使用富文本编辑器,经过调研多个编辑器,CKEditor5 支持 vue,遂采用.因 CKEditor5 文档比较少,此处记录下引用和一些基本用法. CKEdit ...
随机推荐
- windows系统局域网内开启远程桌面图解
需要开启防火墙 默认这里没有远程桌面 添加方法 到此远程桌面已经开好了.
- Hadoop技术在商业智能BI中的应用
Hadoop是个很流行的分布式计算解决方案,是Apache的一个开源项目名称,核心部分包括HDFS及MapReduce.其中,HDFS是分布式文件系统,MapReduce是分布式计算引擎.时至今日,H ...
- TPshop入门大纲
笔记大纲: tpshop目录结构 功能模块 函数库 重要配置 助手函数 插件 模板 1.TPshop目录结构 看这个图,目录结构一目了然. 下面要讲的内容也是根据这个图展开的. 2.功能模块 前几天刚 ...
- CSS3特效----制作3D旋转导航
大致思路:首先给 three-d-box 设置一个 transition是不可少的 然后每个 a 标签里面有两个 span 一个叫 font 一个叫 back,默认状态下 font 旋转0度,也就是没 ...
- 玩一玩nodejs--一个简单的在线实时填表应用
学习nodejs三天,入了个门,感觉他和jsp.php还是存在较大的差别.本文首先复习这些天学的一些知识点,然后谈一下如何一步一步到做一个在线实时填表的小应用,进一步巩固一下这些个知识点.这里先简单介 ...
- Python变量运算字符串等
一,作用域 操作 name = 'liuyueming' if 1==1:... print name... liuyueming 两次回车执行 修改代码 >>> if 1==1:. ...
- jQuery中的选择器(上)
从学习jquery开始,现在已经是第三遍看锋利的jQuery这本书了,现在打算对jQuery中的各种选择器进行一下总结,主要是是为了进一步系统的巩固自己对知识的掌握,另外也可以为那些学习jQuery并 ...
- Django项目部署到Apache服务器
本文讲述的是在阿里云服务器(ECS)上部署Django项目于Apache,服务器操作系统为ubuntu,公网Ip地址为123.56.30.151. 将Django部署到Apache服务器的原因 Dja ...
- 原生JS Ajax 请求
var username = document.getElementById('username').value; var password = document.getElementById('pa ...
- 深入Android RxJava 2
这篇文章是根据Jake Wharton在GOTO CopenHagen 2016上的讲话整理的. 下一个版本(2.0)的RxJava还在开发中.虽然observable.订阅管理和背压(backpre ...