【问题标题】:Azure download blob to users computerAzure 将 blob 下载到用户计算机
【发布时间】:2014-05-20 00:23:39
【问题描述】:

当我遇到一些问题时,我正在处理我的下载 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.. 当网站发布时这将如何工作?如何让用户决定将项目保存到哪个文件夹?我这样做对吗?

提前谢谢你 /菲利普

【问题讨论】:

    标签: asp.net-mvc azure


    【解决方案1】:

    网站发布后如何运作?

    对用户来说很慢,对你来说很昂贵。您正在通过您的应用程序流式传输 BLOB,因此您会遇到瓶颈。使用Shared Access Signatures 并直接从浏览器下载 blob。使用Content-Disposition 作为 URL 的一部分,让浏览器通过“另存为”对话框提示用户。见Javascript download a URL - Azure Blob Storage

    【讨论】:

      【解决方案2】:

      您的问题:是否可以更改名称?

      blob 的名称和用户磁盘上的名称是您/他的选择。它们没有必要匹配,除非可能是为了避免混淆。万一您的用户再次上传它(可能有更改?)保存一些元数据,以便原始文件和更新文件可以在 blob 存储中关联。

      一旦你执行了这一行:

      var blob = container.GetBlockBlobReference(fileName);
      

      ...你已经告诉 Azure 它需要知道的所有信息来定位 blob。

      行内:

      using (var filestream = System.IO.File.OpenWrite...
      

      ...您告诉您的代码将文件放在磁盘上的哪个位置。你说它是一个网站,所以这个语句会将文件放在网络服务器的磁盘上,而不是你的用户的磁盘上。要将文件放到用户的磁盘上,您还需要一个步骤 - 将文件从 Web 服务器(Web 角色实例)下载到用户的计算机上。您可以让他控制文件夹和文件名。这是 MSDN 中的相关部分:

      Downloading and Uploading Files

      【讨论】:

        【解决方案3】:

        这个下载功能可以接受吗?缓慢/昂贵还是尽善尽美?

        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();
        }
        

        【讨论】:

        • 如果我想改用文件流,我将如何进行?
        猜你喜欢
        • 2021-05-22
        • 1970-01-01
        • 2019-08-10
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-17
        • 1970-01-01
        相关资源
        最近更新 更多