Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÎÞÔðÈÎWindows Azure SDK .NET¿ª·¢ÈëÃÅ£¨Î壩£ºBlob Storage·þÎñ
 
×÷Õߣº ÍõÔ¥Ïè À´Ô´£º CSDN ·¢²¼ÓÚ£º2015-09-25
  2955  次浏览      28
 

ÕªÒª£ºÎÞÔðÈÎWindows Azure SDK .NET¿ª·¢ÈëÃÅÆª£¬½«´øÀ´Ò»ÏµÁлù´¡ÎÄÕ£º´ÓWindows Azure¿ª·¢Ç°×¼±¸¹¤×÷¡¢Ê¹ÓÃAzure AD ¹ÜÀíÓû§ÐÅÏ¢¡¢´´½¨¹ÜÀí¡°ÔÆ¡±·þÎñ¡¢µ½Ê¹ÓÃBlob Storage·þÎñµÈ£¬°ïÖú¶ÁÕßÇáÒ×ÉÏÊÖʹÓÃÕâÌ׿ª·¢¹¤¾ß¡£

Íê³ÉÁËÉí·ÝÊÚȨºÍÓû§ÐÅÏ¢¹ÜÀí£¬ÎÒÃÇÖÕÓÚ¿ÉÒÔÕæÕýʹÓÃAzureµÄ·þÎñÁË¡£Azure PaaS·þÎñÖбȽϳöÃûµÄÊ×ÍÆ´æ´¢·þÎñ£¬´æ´¢·þÎñÖбȽϳöÃûµÄÊ×ÍÆBlob Storage·þÎñ£¬±¾ÕÂÎÒÃÇʹÓÃSDK Íê³ÉBlob Storage·þÎñµÄÓ¦Óá£

Blob ´æ´¢Ò»°ãÓÃÓÚ´æ´¢ÎļþÊý¾Ý¡£Blob ¿ÉÒÔÊÇÈκÎÀàÐ͵ÄÎı¾»ò¶þ½øÖÆÊý¾Ý£¬ÈçÎĵµ¡¢Ã½ÌåÎļþ»òÓ¦ÓóÌÐò°²×°³ÌÐò¡£Ò²¾ÍÊÇ˵Blog·Ç³£ÊʺÏÓÃÓÚ´æ´¢ÌṩÏÂÔØµÄÎļþ¡£ÔÚ¿ª·âBlob·þÎñǰ£¬ÄãÐèÒªÁ˽⼸¸ö¸ÅÄî


  • ÕÊ»§¡£´æ´¢ÕÊ»§ÊǴ洢ϵͳÖеÄÒ»¸öÈ«¾ÖΨһ±êʶµÄʵÌå¡£ÕÊ»§ÊÇ BLOB ·þÎñµÄ¸¸¼¶ÃüÃû¿Õ¼ä¡£ËùÓÐÈÝÆ÷¶¼ÓëÒ»¸öÕÊ»§¹ØÁª¡£
  • ÈÝÆ÷¡£ÈÝÆ÷ÊÇÕÊ»§ÄÚÒ»×éÓû§¶¨ÒåµÄ Blob¡£ÈÝÆ÷×ÊԴûÓйØÁªµÄÄÚÈÝ£¬Ö»ÓÐÊôÐÔºÍÔªÊý¾Ý¡£ÈÝÆ÷Ãû³Æ±ØÐëÊÇÓÐЧµÄ DNS Ãû³ÆÇÒ·ûºÏÒÔÏÂÃüÃû¹æÔò
  • Blob¡£Blob ÊDZíʾһ×éÄÚÈݵÄʵÌå¡£Blob ×ÊÔ´°üº¬ÄÚÈÝ¡¢ÊôÐÔºÍÔªÊý¾Ý¡£Blob Ãû³Æ¿ÉÒÔ°üº¬ÈκÎ×Ö·û×éºÏ£¬³¤¶È±ØÐëÖÁÉÙΪ 1 ¸ö×Ö·û£¬ÇÒ²»Äܳ¬¹ý 1,024 ¸ö×Ö·û¡£Blob Ãû³ÆÇø·Ö´óСд£¬ÇÒ×é³É Blob Ãû³ÆµÄ·¾¶¶ÎÊýÄ¿²»Äܳ¬¹ý 254 ¸ö¡£´ó²¿·ÖÎļþÊÇ¿é blobs¡£µ¥¸ö¿é blob ×î´ó¿ÉÒÔΪ 200 GB¡£
  • URL ¸ñʽ£º Blob ¿ÉʹÓÃÒÔÏ URL ¸ñʽѰַ£ºhttp://<storage account>.blob.core.chinacloudapi.cn/<container>/<blob>

ÄãÒ»¶¨Òª¼Çס£ºBLOB ·þÎñ»ùÓÚÆ½Ãæ´æ´¢·½°¸¶ø²»ÊǷֲ㷽°¸¡£µ«ÊÇ£¬¿ÉÒÔÔÚ Blob Ãû³ÆÖÐÖ¸¶¨×Ö·û»ò×Ö·û´®·Ö¸ô·ûÀ´´´½¨ÐéÄâ²ã´Î½á¹¹¡£

ʹÓÃBlob Storage·þÎñÎÒÃÇÐèÒªÔÚÅäÖÃÎļþдÈë´æ´¢×ÊÔ´µÄÁ¬½Ó×Ö·û´®£¬Õâ¸ö¸ÅÄîÀàËÆÊý¾Ý¿âµÄÁ¬½Ó×Ö·û´®¡£Á¬½Ó×Ö·û´®ÔÚappSettings½ÚµãÖÐ

<add key="Microsoft.ServiceBus.Namespace" 
value="Endpoint=sb://<ÄãµÄ´æ´¢Á´½Óurl>/;SharedAccessKeyName=<ÄãµÄ¹²ÏíÃÜÔ¿>" />
<add key="Microsoft.WindowsAzure.Storage"
value="BlobEndpoint=<ÄãµÄ´æ´¢×ÊÔ´Á´½Ó>/;QueueEndpoint=<ÄãµÄ´æ´¢×ÊÔ´Á´½Ó>;
TableEndpoint=<ÄãµÄ´æ´¢×ÊÔ´Á´½Ó>/;
AccountName=<ÄãµÄ´æ´¢×ÊÔ´Ãû³Æ>;
AccountKey=<ÄãµÄ´æ´¢×ÊÔ´·ÃÎÊÃÜÔ¿> " />

ÎÒÃÇÐèÒª´ÓNuGet»ñÈ¡WindowsAzure.Storage¿â£¬¸Ã¿âµÄÏîÄ¿µØÖ·ÊÇ£ºhttps://www.nuget.org/packages/WindowsAzure.Storage£¬ÒýÓÃÍê³Éºó£¬ÎÒÃǽ¨Á¢±¾ÕµĿØÖÆÆ÷£ºStorageBlobController£¬¸Ã¿ØÖÆÆ÷ÓÐÈçÏÂAction

  • Index
  • Create
  • Delete
  • List
  • Upload
[Authorize]
public class StorageBlobController : Controller
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse
(CloudConfigurationManager.GetSetting("Microsoft.WindowsAzure.Storage"));
CloudBlobClient blobClient = null;

public StorageBlobController()
{
blobClient = storageAccount.CreateCloudBlobClient();
}
}

Õâ´ÎÎÒÃǽ«[Authorize]¼ÓÔØµ½ControllerÉÏ£¬Òâζ×ű¾´Î¿ØÖÆÆ÷µÄËùÓвÙ×÷¶¼±ØÐë¾­¹ýÉí·ÝÑéÖ¤¡£

Ò»¡¢Áгöµ±Ç°´æ´¢Õ˺ÅÈÝÆ÷

´úÂë¼òµ¥µ½ÎÞ·¨Ö±ÊÓ

public ActionResult Index()
{
var containes = blobClient.ListContainers();
return View(containes);
}

¶ÔÓ¦µÄView

@model IEnumerable<Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer>
                              
@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
@Html.ActionLink("´´½¨ÐµÄÈÝÆ÷", "Create")
</p>
<table class="table">
<tr>
<th>Name</th>
<th>StorageUri</th>
<th>Uri</th>
</tr>

@foreach (var item in Model)
{
<tr>
<td>
@Html.ActionLink(@item.Name, "List", new { name = item.Name })
</td>
<td>@item.StorageUri</td>
<td>@item.Uri</td>
<td>
@Html.ActionLink("ÉÏ´«Îļþ", "Upload", new { name = item.Name }) |
@Html.ActionLink("ɾ³ý", "Delete", new { name = item.Name })
</td>
</tr>
}
</table>

ÔËÐнá¹ûÈçͼ

¶þ¡¢´´½¨ÐµÄÈÝÆ÷

´´½¨ÐµÄÈÝÆ÷֮ǰÎÒÃDZØÐëÅжÏÓÐûÓÐͬÃû£¬È»ºóÉèÖÃÈÝÆ÷·ÃÎÊȨÏÞ

[HttpPost]
public ActionResult Create(string name)
{
CloudBlobContainer container = blobClient.GetContainerReference(name);
container.CreateIfNotExists();
container.SetPermissions(new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
return RedirectToAction("Index");
}

¶ÔÓ¦ViewµÄ´úÂë

@model Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient
                              
@{
ViewBag.Title = "Create";
}

<h2>Create Cloud Blob</h2>

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.Label
("ÈÝÆ÷Ãû³Æ(ÈÝÆ÷Ãû³ÆÖ»Äܰüº¬Ð¡Ð´×Öĸ¡¢Êý×ÖºÍÁ¬×Ö·û£¬²¢ÇÒ±ØÐëÒÔ×Öĸ»òÊý×Ö¿ªÍ·¡£ Ãû³Æ²»Äܰüº¬Á½¸öÁ¬ÐøµÄÁ¬×Ö·û)")
@Html.TextBox("name", "", new { @class = "form-control" })
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
}

<div>
@Html.ActionLink("Back to List", "Index")
</div>

ÔËÐкóÄã¿ÉÒÔÌí¼ÓеÄÈÝÆ÷£¬¹Ø¼ü¾ÍÊÇ£ºÈÝÆ÷Ãû³ÆÖ»Äܰüº¬Ð¡Ð´×Öĸ¡¢Êý×ÖºÍÁ¬×Ö·û£¬²¢ÇÒ±ØÐëÒÔ×Öĸ»òÊý×Ö¿ªÍ·¡£ Ãû³Æ²»Äܰüº¬Á½¸öÁ¬ÐøµÄÁ¬×Ö·û¡£²¢ÇÒSetPermissions±ØÐëÔÚCreateIfNotExists³É¹¦Ö´ÐÐÖ®ºóÔËÐС£

´´½¨³É¹¦ºó·µ»ØIndex

Èý¡¢É¾³ýÈÝÆ÷

ɾ³ýÈÝÆ÷·Ç³£¼òµ¥£¬»ñÈ¡µ½ÈÝÆ÷ÒýÓã¬È»ºóɾ³ý

public ActionResult Delete(string name)
{
blobClient.GetContainerReference(name).Delete();
return RedirectToAction("Index");
}

ËÄ¡¢ÉÏ´«BLOBÎļþ

ÏÖÔÚÊDZ¾ÕÂ×îºóÒ»½Ú£¬Ò²ÊÇ×îÖØÒªµÄÒ»½Ú£¬ÔÚ±¾½ÚÖÐÎÒÃǽ«Á˽⵽ͨ¹ýHTMLµÄFile½«ÎļþÉÏ´«µ½ÈÝÆ÷ÖС£¿ØÖÆÆ÷Öн«HttpPostedFileBaseÎļþÁ÷ÉÏ´«µ½ÈÝÆ÷¡£

[HttpPost]
public ActionResult Upload(string name, HttpPostedFileBase[] files)
{
if (files == null)
{
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest);
}
CloudBlobContainer container = blobClient.GetContainerReference(name);

foreach (HttpPostedFileBase item in files)
{
string filename = Guid.NewGuid().ToString() + "." + item.FileName.Split('.').Last();
CloudBlockBlob blob = container.GetBlockBlobReference(filename);
blob.UploadFromStream(item.InputStream);
}

return RedirectToAction("List", new { name = name });
}

¶ÔÓ¦µÄView£¬×¢ÒâFormÐèÒªÉùÃ÷enctype = "multipart/form-data" }

@{
ViewBag.Title = "Upload";
}
<h2>Upload</h2>

@using (@Html.BeginForm("Upload", "StorageBlob", new
{ name = @ViewBag.Container }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.Label("Ñ¡ÔñÎļþ")
<input type="file" name="files" multiple/>
<input type="submit" value="ÉÏ´«" />
}

Äã¿ÉÒÔ¶àÉÏ´«¼¸ÖÖÎļþ£¬±ÈÈçÊÓÆµ¡¢ÒôƵ¡¢Í¼Æ¬ºÍÆäËûÎļþ¡£

Îå¡¢ÁгöÈÝÆ÷Öд洢µÄÊý¾Ý

ÁгöÈÝÆ÷Öд洢µÄÄÚÈݹؼüÊÇÐèÒª½«·µ»ØµÄ¶ÔÏóתΪCloudBlockBlobÀàÐÍ¡£ÔÚView½¨ÒéÄ㽫²»Í¬ÀàÐ͵ÄÎļþ×ö¸üÓѺõÄÏÔʾ£¬±ÈÈçͼƬֱ½ÓÏÔʾͼƬ£¬ÒôƵÎļþÖ±½ÓʹÓÃHTML5µÄÒôƵ²¥·¢Æ÷

public ActionResult List(string name)
{
CloudBlobContainer container = blobClient.GetContainerReference(name);
var result = container.ListBlobs(null, false).Where
(x => x.GetType() == typeof(CloudBlockBlob)).Cast<CloudBlockBlob>();
return View(result);
}

¶ÔÓ¦µÄView¶Ô²»Í¬ÀàÐÍÎļþ×öÁ˲»Í¬µÄ³ÊÏÖ·½°¸

@model IEnumerable<Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob>
                              
@{
ViewBag.Title = "List";
}

<h2>List</h2>

<p>
@Html.ActionLink("ÉÏ´«Îļþ", "Upload", new { name = @ViewBag.Container })
</p>
<table class="table">
<tr>
<th>Container</th>
<th>Name</th>
<th>Size</th>
<th>Type</th>
<th>Uri</th>
<th>LastDate</th>
</tr>

@foreach (var item in Model)
{
<tr>
<td>@item.Container.Name</td>
<td>@item.Name</td>
<td>@item.Properties.Length</td>
<td>@item.BlobType</td>
<td>
@{
var fileType = System.IO.Path.GetExtension(item.Name).ToLower();
if (new string[] { ".jpg", ".png" }.Any(x => x == fileType))
{
<img src="@item.Uri" />
}
else if (new string[] { ".ogg", ".mp4" }.Any(x => x == fileType))
{
<video width="320" height="240" controls="controls">
@if (fileType == "ogg")
{
<source src="@item.Uri" type="video/ogg">
}
else
{
<source src="@item.Uri" type="video/mp4">
}

Your browser does not support the video tag.
</video>
}
else if (fileType == ".mp3")
{
<audio controls="controls">
<source src="@item.Uri" type="audio/mpeg">
Your browser does not support the audio tag.
</audio>
}
else
{
<a href="@item.Uri">ÏÂÔØ</a>
}
}
</td>
<td>@item.Properties.LastModified.Value.DateTime</td>
</tr>
}
</table>

ÔËÐкóÈçͼ

   
2955 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ʹÓÃdecj¼ò»¯Webǰ¶Ë¿ª·¢
Web¿ª·¢¿ò¼ÜÐγÉÖ®ÂÃ
¸üÓÐЧÂʵÄʹÓÃVisual Studio
MVP+WCF+Èý²ã½á¹¹´î½¨¿ò¼Ü
ASP.NETÔËÐлúÖÆÇ³Îö¡¾Í¼½â¡¿
±àд¸üºÃµÄC#´úÂë
10¸öVisual Studio¿ª·¢µ÷ÊÔ¼¼ÇÉ

.NET¿ò¼ÜÓë·Ö²¼Ê½Ó¦Óüܹ¹Éè¼Æ
.NET & WPF & WCFÓ¦Óÿª·¢
UML&.Net¼Ü¹¹Éè¼Æ
COM×é¼þ¿ª·¢
.NetÓ¦Óÿª·¢
InstallShield

ÈÕÕÕ¸Û .NET Framework & WCFÓ¦Óÿª·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ
±±¾© .NetÓ¦ÓÃÈí¼þϵͳ¼Ü¹¹
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
ÈüÃÅÌú¿Ë C#Óë.NET¼Ü¹¹Éè¼Æ
¹ã¶«ºËµç .NetÓ¦ÓÃϵͳ¼Ü¹¹