Я использую веб-формы asp.net.
У меня есть файлы PDF в хранилище Azure, которые мне нужно обработать. Для этого я использую библиотеку PDFJet.
Я бы хотел
потоковое воспроизведение PDF без загрузки, так как мне нужно обработать большое количество PDF.
Я использую следующую функцию для потоковой передачи PDF из Azure:
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));
Спасибо за вашу помощь.