从 Azure 存储对 Blob 进行文件流式传输



我在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 网络表单中完成的。

谢谢你的帮助。

我现在使用以下函数来阅读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.使用 blob 网址下载。

创建具有读取权限和内容处置标头集的共享访问签名,并基于该签名创建 Blob URL 并使用该 URL。在这种情况下,Blob 内容将直接从存储流式传输到客户端浏览器。

2.获取 blob 并下载文件从 Blob。

3.将文件下载到本地的确切路径。

网络表单

可以使用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);
}
}

相关内容

  • 没有找到相关文章

最新更新