当我遇到一些问题时,我正在处理我的下载blob功能。
我希望用户能够下载blob,并且当该项目下载到用户计算机时,我想要该项目上的特定文件名。我还希望用户决定该项目应保存到哪个文件夹。
到目前为止,这是我不太好看的代码:
var fileName = "tid.txt9c6b412a-270a-4f67-8e65-7ce2bf87503d";
var containerName = "uploads";
CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;
var blobClient = account.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference(fileName);
using (var filestream = System.IO.File.OpenWrite(@"C:\Info\tid.txt9c6b412a-270a-4f67-8e65-7ce2bf87503d"))
{
blob.DownloadToStream(filestream);
}
fileName = blob名称
是否可以更改名称?文件结尾全部搞砸了我的guid。 目前,下载到文件夹是C:\ Info ..当网站发布时,这将如何工作?如何让用户决定该项目应保存到哪个文件夹?我这样做了吗?
提前谢谢你 /菲利普
答案 0 :(得分:1)
网站发布后如何运作?
对用户来说很慢,对你来说很贵。您正在通过您的应用程序流式传输BLOB,因此您将遇到瓶颈。使用Shared Access Signatures并直接从浏览器下载blob。使用Content-Disposition
作为URL的一部分,让浏览器通过“另存为”对话框提示用户。请参阅Javascript download a URL - Azure Blob Storage。
答案 1 :(得分:1)
您的问题:是否可以更改名称?
blob的名称和用户磁盘上的名称是您的选择。除了可能避免混淆之外,没有必要匹配它们。您的用户是否会再次上传它(可能会有更改?)保存一些元数据,以便原始文件和更新的文件可以在blob存储中相关。
执行该行后:
var blob = container.GetBlockBlobReference(fileName);
...你告诉Azure所有它需要知道找到blob。
在行中:
using (var filestream = System.IO.File.OpenWrite...
...您告诉您的代码将文件放在磁盘上的位置。你说它是一个网站,所以这个声明会把文件放到网络服务器的磁盘上,而不是你的用户的磁盘上。要将文件放到用户磁盘上,还需要一个步骤 - 将文件从Web服务器(Web角色实例)下载到用户的计算机。您可以让他控制文件夹和文件名。以下是MSDN中的相关部分:
答案 2 :(得分:0)
此下载功能是否可以接受?慢/昂贵还是它得到的好?
public void DownloadFile(string blobName)
{
CloudBlobContainer blobContainer = CloudStorageServices.GetCloudBlobsContainer();
CloudBlockBlob blob = blobContainer.GetBlockBlobReference(blobName);
MemoryStream memStream = new MemoryStream();
blob.DownloadToStream(memStream);
Response.ContentType = blob.Properties.ContentType;
Response.AddHeader("Content-Disposition", "Attachment; filename=" + blobName.ToString());
Response.AddHeader("Content-Length", (blob.Properties.Length - 1).ToString());
Response.BinaryWrite(memStream.ToArray());
Response.End();
}