Ранее я использовал Windows.AzureStorage для загрузки PDF-файлов из моей учетной записи хранения Azure и потоковой передачи PDF-файлов в браузер. Поскольку он устарел, я пытаюсь соответствовать Azure.Files.Storage.Shares.
Обратите внимание, что я мог использовать Windows.AzureStorage в течение многих лет.
Я могу получить файл из Azure и прочитать байты, но когда я пытаюсь передать их в браузер, файл не является допустимым PDF.
Старый способ сделать это выглядел так:
pdfFile.FetchAttributes()
Dim byteData As Byte() = New Byte(pdfFile.Properties.Length - 1) {}
pdfFile.DownloadToByteArray(byteData, 0)
byteReturnValue = byteData
Это жестко закодированная тестовая функция, которая работает, но не отображает действительный PDF. Количество байтов, возвращенных с помощью нового метода, показанного ниже, равно 98 284. Количество байтов, возвращенных предыдущим (успешным) методом, равно 98 284. Это как-то связано со смещением??
Я в своем уме.
Public Shared Function GetPDFStream() As Byte()
Dim connectionString As String = ConfigurationManager.AppSettings("StorageConnectionString")
Dim shareName As String = "root"
Dim dirName As String = "invoicestest\MSEVN"
Dim fileName As String = "EVE0042361.pdf"
Dim share As ShareClient = New ShareClient(connectionString, shareName)
Dim directory As ShareDirectoryClient
Dim cloudfile As ShareFileClient
Dim download As ShareFileDownloadInfo
directory = share.GetDirectoryClient(dirName)
cloudfile = directory.GetFileClient(fileName)
download = cloudfile.Download()
Dim byteData As Byte() = New Byte(download.ContentLength - 1) {}
download.Content.Read(byteData, 0, download.ContentLength - 1)
GetPDFStream = byteData
End Function
Эти байты возвращаются на другую страницу, которая выводит байты в браузер (эта часть в порядке, но я показываю, как используются байты)
Response.Buffer = True
Dim strMimeType = "application/pdf"
Response.Clear()
Response.ContentType = strMimeType
Response.AddHeader("content-disposition", "attachment;filename=" & strFileName)
Response.OutputStream.Write(byteReturnValue, 0, byteReturnValue.Length)
Response.OutputStream.Flush()
Response.OutputStream.Close()
Response.Flush()
Response.Close()