简单总结下关于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,点那个像插头一样的图标,然后就尽情的下一步吧~
我把原作者写的几个示例集合到了一个方法中(也许这个方法还有很多需要改进的地方。。)
我贴到这里来给大家用,这样我走的坑,大家就尽量别再掉进去了
1 public class BlobCommon 2 { 3 private CloudBlobContainer container; 4 5 public BlobCommon(string connectionUrl,string containerName) 6 { 7 CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionUrl); 8 CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 9 container = blobClient.GetContainerReference(containerName); 10 container.CreateIfNotExists(); 11 } 12 13 public BlobCommon() 14 { 15 try 16 { 17 var connectionUrl = ConfigurationManager.ConnectionStrings["BlobConnectionUrl"].ConnectionString; 18 var containerName = ConfigurationManager.AppSettings["BlobContainer"].ToString(); 19 CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionUrl); 20 CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 21 container = blobClient.GetContainerReference(containerName); 22 container.CreateIfNotExists(); 23 } 24 catch (Exception ex) 25 { 26 } 27 28 } 29 30 public bool SaveImage(string imageName,string file) 31 { 32 try 33 { 34 CloudBlockBlob blockBlob = container.GetBlockBlobReference(imageName); 35 using (var fileStream = System.IO.File.OpenRead(file)) 36 { 37 // 这是一个同步执行的方法 38 blockBlob.UploadFromStream(fileStream); 39 } 40 return true; 41 } 42 catch (Exception ex) 43 { 44 return false; 45 } 46 } 47 48 public bool SaveImage(string imageName, byte[] imageData) 49 { 50 try 51 { 52 CloudBlockBlob blockBlob = container.GetBlockBlobReference(imageName); 53 blockBlob.UploadFromByteArray(imageData,0, imageData.Length); 54 //using (var fileStream = System.IO.File.OpenRead(file)) 55 //{ 56 // // 这是一个同步执行的方法 57 // blockBlob.UploadFromStream(fileStream); 58 //} 59 return true; 60 } 61 catch (Exception ex) 62 { 63 return false; 64 } 65 } 66 67 public List<SupervisorReportImageModel> GetBlobImageList() 68 { 69 try 70 { 71 var list = new List<SupervisorReportImageModel>(); 72 foreach (IListBlobItem item in container.ListBlobs(null, false)) 73 { 74 if (item.GetType() == typeof(CloudBlockBlob)) 75 { 76 CloudBlockBlob blob = (CloudBlockBlob)item; 77 // todo something 78 list.Add(new SupervisorReportImageModel() 79 { 80 Name = blob.Name.ToString(), 81 Url = blob.SnapshotQualifiedStorageUri.SecondaryUri.ToString() 82 }); 83 } 84 else if (item.GetType() == typeof(CloudAppendBlob)) 85 { 86 CloudAppendBlob appendBlob = (CloudAppendBlob)item; 87 // todo something 88 list.Add(new SupervisorReportImageModel() 89 { 90 Name = appendBlob.Name.ToString(), 91 Url = appendBlob.SnapshotQualifiedStorageUri.SecondaryUri.ToString() 92 }); 93 } 94 else if (item.GetType() == typeof(CloudPageBlob)) 95 { 96 CloudPageBlob pageBlob = (CloudPageBlob)item; 97 // todo something 98 list.Add(new SupervisorReportImageModel() 99 { 100 Name = pageBlob.Name.ToString(), 101 Url = pageBlob.SnapshotQualifiedStorageUri.SecondaryUri.ToString() 102 }); 103 } 104 else if (item.GetType() == typeof(CloudBlobDirectory)) 105 { 106 CloudBlobDirectory directory = (CloudBlobDirectory)item; 107 // todo something 108 list.Add(new SupervisorReportImageModel() 109 { 110 Name = directory.Uri.ToString(), 111 Url = directory.StorageUri.SecondaryUri.ToString() 112 }); 113 } 114 } 115 return list; 116 } 117 catch (Exception ex) 118 { 119 return null; 120 } 121 } 122 123 public bool DownloadImage(string imageName,string saveUrl) 124 { 125 try 126 { 127 // 创建名称为 mypicture.png 的 Blob 对象的引用。 128 CloudBlockBlob blockBlob = container.GetBlockBlobReference(imageName); 129 // 把文件保存到本地。 130 using (var fileStream = System.IO.File.OpenWrite(saveUrl)) 131 { 132 blockBlob.DownloadToStream(fileStream); 133 } 134 return true; 135 } 136 catch (Exception ex) 137 { 138 return false; 139 } 140 } 141 142 public bool SetupBlobRole() 143 { 144 try 145 { 146 BlobContainerPermissions permissions = container.GetPermissions(); 147 // Container 中的所有 Blob 都能被访问 148 permissions.PublicAccess = BlobContainerPublicAccessType.Container; 149 container.SetPermissions(permissions); 150 return true; 151 } 152 catch (Exception ex) 153 { 154 return false; 155 } 156 } 157 158 public bool DeleteImage(string imageName) 159 { 160 try 161 { 162 CloudBlockBlob blockBlob = container.GetBlockBlobReference(imageName); 163 blockBlob.DeleteIfExists(); 164 return true; 165 } 166 catch (Exception ex) 167 { 168 return false; 169 } 170 } 171 172 public SupervisorReportImageModel GetBlobImageByImageName(string imageName) 173 { 174 try 175 { 176 List<IListBlobItem> imageData = container.ListBlobs(imageName, false).ToList(); 177 foreach (var item in imageData) 178 { 179 if (item.GetType() == typeof(CloudBlockBlob)) 180 { 181 CloudBlockBlob blob = (CloudBlockBlob)item; 182 // todo something 183 return new SupervisorReportImageModel() 184 { 185 Name = blob.Name.ToString(), 186 Url = blob.SnapshotQualifiedStorageUri.SecondaryUri.ToString() 187 }; 188 } 189 else if (item.GetType() == typeof(CloudAppendBlob)) 190 { 191 CloudAppendBlob appendBlob = (CloudAppendBlob)item; 192 // todo something 193 return new SupervisorReportImageModel() 194 { 195 Name = appendBlob.Name.ToString(), 196 Url = appendBlob.SnapshotQualifiedStorageUri.SecondaryUri.ToString() 197 }; 198 } 199 else if (item.GetType() == typeof(CloudPageBlob)) 200 { 201 CloudPageBlob pageBlob = (CloudPageBlob)item; 202 // todo something 203 return new SupervisorReportImageModel() 204 { 205 Name = pageBlob.Name.ToString(), 206 Url = pageBlob.SnapshotQualifiedStorageUri.SecondaryUri.ToString() 207 }; 208 } 209 else if (item.GetType() == typeof(CloudBlobDirectory)) 210 { 211 CloudBlobDirectory directory = (CloudBlobDirectory)item; 212 // todo something 213 return new SupervisorReportImageModel() 214 { 215 Name = directory.Uri.ToString(), 216 Url = directory.StorageUri.SecondaryUri.ToString() 217 }; 218 } 219 } 220 return null; 221 } 222 catch (Exception ex) 223 { 224 return null; 225 } 226 } 227 }
----------------------------------------------------我是分割线-------------------------------------------------------
写完之后我不由得有一些困惑,我看到其中有一些方法可以创建文件夹啊什么的,可是暂时还不会用,还需要学习一下子。或者有老司机教教我,给我一个使用文档也可以啦~
我现在有一个最大的难题,就是文件权限的问题。在文档中,我看到了可以获取权限的方法,可是,如果我的图片,提供url出来之后,我怎么才能使用这个权限去下载图片呢。。。