c# - 从 Azure 存储文件流式传输 blob

标签 c# asp.net webforms azure-storage filestream

我在 Azure 中有图像,需要使用 pdfJet 添加到 pdf 中。

这是我在读取磁盘上的图像时使用的代码,但是我有很多图像,从 Azure 下载它们没有意义。

Image image = new Image(objects, new BufferedStream(new FileStream(LocalPath + "image.PNG", FileMode.Open, FileAccess.Read)), ImageType.PNG);

PS:这是在 asp.net webforms 中完成的。

感谢您的帮助。

我现在正在使用以下函数来阅读 PDF:

    public MemoryStream DownloadToMemoryStream(DTO.BlobUpload b)
    {
        CloudStorageAccount storageAccount = Conn.SNString(b.OrgID);
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference(b.Container);
        CloudBlockBlob blob = container.GetBlockBlobReference(b.FileName);
        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"
        });
        using (MemoryStream ms = new MemoryStream())
        {
            blob.DownloadToStream(ms);
            return ms;
        }

    }

在我使用的 aspx 页面中:

MemoryStream pdfScript = B.DownloadToMemoryStream(b);

读取流:

SortedDictionary<Int32, PDFobj> objects = pdfFinalScript.Read(pdfScript);

但是我收到错误消息: 无法访问已关闭的流

我已经查看了如何打开流,但还没有成功。

请问能帮忙吗,谢谢

最佳答案

根据您的描述,您将从 Azure 下载 blob。 以下是您可以引用的几种方法。

1. Download with blob url .

创建一个具有读取权限和 Content-Disposition header 集的共享访问签名,并基于它创建 blob URL 并使用该 URL。在这种情况下,blob 内容将直接从存储流式传输到客户端浏览器。

2.获取blob和DownloadFileFromBlob .

3.下载文件到exactly path in local .

网络表单:

您可以使用 Response.Redirect(blobUrl); 重定向 blob url 并下载它。

在 .aspx 中:

<asp:Button ID="Button1" runat="server" Text="Click Me" OnClick="Button1_Click" /> 

在 aspx.cs 中:

protected void Button1_Click(object sender, EventArgs e)
        {
            CloudStorageAccount account = new CloudStorageAccount(new StorageCredentials("accountname", "accountkey"), true);
            var blobClient = account.CreateCloudBlobClient();
            var container = blobClient.GetContainerReference("container");
            var blob = container.GetBlockBlobReference("text.PNG");
            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"
            });
            using (MemoryStream ms = new MemoryStream())
            {
                blob.DownloadToStream(ms);
                Image image = new Image(objects, ms, ImageType.PNG);
            }
        }

关于c# - 从 Azure 存储文件流式传输 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51944905/

相关文章:

ASP.NET WebForms - session 变量为空

c# - 如何在未选中复选框的情况下按删除按钮时在客户端显示错误消息

c# - 如何查看将哪个类作为参数传递给 Rider 中的模板?

c# - 授权属性意外工作

c# - 如何在部分 View 中使用@using?

asp.net - 在 ASP.NET 应用程序中存储单例实例的最佳实践

c# - 如何使用 C# 在 mysql 5.1 版本中插入 unicode 值?

asp.net - Azure 上的无 session ASP.NET

asp.net-mvc-3 - ASP.NET Webforms 和 MVC 3 中的成员资格提供程序之间的区别

c# - 在 WinForms Form 中设置 Form.Text 不会更新标题