gpt4 book ai didi

asp.net - 从 Azure 存储流式传输 blob - 无法访问已关闭的流

转载 作者:行者123 更新时间:2023-12-02 00:30:27 25 4
gpt4 key购买 nike

我正在使用 asp.net 网络表单。

我需要处理 Azure 存储中的 pdf。为此,我正在使用 PDFJet 库。

我愿意流式传输 pdf 而无需下载它,因为我必须处理大量 pdf。

我正在使用以下函数从 Azure 流式传输 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.cs 页面中使用以下代码读取 pdf 流:

BufferedStream pdfScript = new BufferedStream(new FileStream(ScriptPath + Script, FileMode.Open));

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

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

如果我将pdf下载到磁盘,这是我使用的功能,这个工作但不实用:

blockBlob.DownloadToFile(b.LocalPath + b.FileName, FileMode.Create);

BufferedStream pdfScript = new BufferedStream(new FileStream(ScriptPath + Script, FileMode.Open));

感谢您的帮助。

最佳答案

Cannot access a closed Stream

根据报错信息,需要重新设置码流位置。

请在返回之前尝试重置流位置。blob.DownloadToStream(ms);ms.Position = 0;//添加这段代码返回 ms;

更新:

ms 如果超出使用部分则关闭。所以请尝试使用以下代码。

MemoryStream stream = new MemoryStream();
using (MemoryStream ms = new MemoryStream())
{
blob.DownloadToStream(ms);
ms.Position = 0
ms.CopyTo(stream);
stream.Position = 0;
return stream;
}

关于asp.net - 从 Azure 存储流式传输 blob - 无法访问已关闭的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52123605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com