当前位置: 首页 > 知识库问答 >
问题:

从Azure Blob存储下载CSV到浏览器

孟俊晖
2023-03-14

我可以成功地上传到Azure Blob存储,但我在下载文件(csv和pdf文件)时遇到了问题。

我的目标是将文件下载到浏览器(因为这将是一个web应用程序,我不知道下载文件的本地路径)。

        string connString = ConfigurationManager.ConnectionStrings["MyTestStorageAccount"].ConnectionString;
        CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(connString);
        CloudBlobClient _blobClient = cloudStorageAccount.CreateCloudBlobClient();
        CloudBlobContainer _cloudBlobContainer = _blobClient.GetContainerReference("filestorage");
        CloudBlockBlob _blockBlob = _cloudBlobContainer.GetBlockBlobReference("testfile.csv");
        Response.AddHeader("Content-Disposition", "attachment; filename=" + "testfile.csv");
        _blockBlob.DownloadToStream(Response.OutputStream);

共有1个答案

皇甫才良
2023-03-14

我在mvc中按照你的代码下载csv,当我打开它的时候,里面的内容不是我添加的,而是一些html模板。

如果这是您的问题,您可以参考以下代码:

public ActionResult Download()
    {
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

            CloudBlobClient _blobClient = cloudStorageAccount.CreateCloudBlobClient();
            CloudBlobContainer _cloudBlobContainer = _blobClient.GetContainerReference("data");
            CloudBlockBlob _blockBlob = _cloudBlobContainer.GetBlockBlobReference("table.csv");
            Response.AddHeader("Content-Disposition", "attachment; filename=" + "table.csv");
             MemoryStream ms = new MemoryStream();
            _blockBlob.DownloadToStream(ms);
            ms.Position = 0;
            return File(ms, "application/octet-stream", "table.csv");
}

您还可以返回重定向(blobUrl);

有关详细信息,请参阅以下代码:

public ActionResult Download()
    {
        CloudStorageAccount account = new CloudStorageAccount(new StorageCredentials("accountname", "accountkey"), true);
        var blobClient = account.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference("container-name");
        var blob = container.GetBlockBlobReference("file-name");
        var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
            {
                Permissions = SharedAccessBlobPermissions.Read,
                SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10),//assuming the blob can be downloaded in 10 miinutes
            }, new SharedAccessBlobHeaders()
            {
                ContentDisposition = "attachment; filename=file-name"
            });
        var blobUrl = string.Format("{0}{1}", blob.Uri, sasToken);
        return Redirect(blobUrl);
    }
 类似资料:
  • 简要背景:我有一个在Azure Blob存储中存储文件的web服务。该服务的用户可以一次下载多个文件。如果下载的所有文件的总文件大小相对较小,那么我在服务器上压缩文件并返回该压缩文件--这里没有问题。 场景:例如,如果一个用户想要下载3个每个1GB的文件,那么我将这些文件下载到服务器是不现实的,将它们压缩,然后将压缩文件返回到浏览器。因此,对于这些场景,我将Azure Blob Storage U

  • 我有一个基于Spring(Spring Security,Spring控制器和MVC)的项目,所以在我的超文本标记语言页面中,我必须允许文件下载。 我处理事件并使用基于jquery插件的代码 在我的控制器中: 但它在Spring Security性方面有问题,比如这个post x-frame,在internet explorer上不起作用。那么,有没有一种不用插件就能下载存储在我服务器上的文件的方

  • 是否可以创建一个html表单,允许Web用户直接将文件上传到azure blob store,而不使用其他服务器作为中介?S3和GAW blob store都允许这样做,但我找不到对azure blob存储的任何支持。

  • 从互联网下载图片,并显示。下载图片过程中显示进度条。支持图片缩放,运用了ASI、SDWebImage。支持图片缓存。 [Code4App.com]

  • 问题内容: 我有以下代码,可让用户下载csv文件中的数据字符串。 如果客户端运行代码,它将生成空白页并开始下载csv文件中的数据,效果很好。 所以我试图用JSON对象来做到这一点 但是我只看到一个页面,上面显示了JSON数据,没有下载它。 我进行了一些研究,并且该研究声称可以工作,但是我的代码没有任何区别。 我在代码中缺少什么吗? 问题答案: 这是我为应用程序解决的方式: HTML: JS(纯JS

  • 问题内容: 我们一直在寻找答案,但是还没有找到解决方案。 我们有一个Web服务器,允许用户下载动态生成的文件(pdf),并通过servlet提供服务。我们想知道下载何时完成(以及如何:成功,失败,用户取消了吗?)。 没有用户输入,有没有办法知道这一点?这些文件相对较小,因此不需要进度条功能,但是我们需要某种“挂勾”功能,可以在下载完成后向您报告。这可能吗? [edit]浏览器端将具有什么功能来检测