这就是我从数据库中检索varbinary pdf并在asp.net页面中查看的方式,

byte[] pdfFile= null;
var obj = DBContext.MyTable.Where(x => x.ID == 1 ).SingleOrDefault().pdfColumn;
pdfFile = new byte[obj.Length];

if (pdfFile!= null)
{
     Response.ClearHeaders();
     Response.Clear();
     Response.AddHeader("Content-Type", "application/pdf");
     Response.AddHeader("Content-Length", pdfFile.Length.ToString());
     Response.AddHeader("Content-Disposition", "inline; filename=sample.pdf");
     Response.BinaryWrite(pdfFile);
     Response.Flush();
     Response.End();
}


当我使用此代码查看pdf时,收到此消息



我的obj返回喜欢



字节数组(pdfFile)的内容返回喜欢



而且我的pdf文件没有显示!我的代码有什么问题?

最佳答案

在我看来,您只是用obj的正确长度创建了一个字节数组,但实际上并未将obj的内容放入pdfFile数组中。

如果您...

byte[] pdfFile= null;
var obj = DBContext.MyTable.Where(x => x.ID == 1 ).SingleOrDefault().pdfColumn;
pdfFile = new byte[obj.Length];

obj.CopyTo(pdfFile);


您所看到的错误和显示的空白页通常都是pdf文件全部为二进制零的症状,或者如果您使用的是流,则流的位置在末尾。您可以通过在调试中运行并在将字节数组或流发送到管道之前检查字节数组或流的内容来轻松确定是否是这种情况。检查长度和内容,它应该看起来像二进制,而不仅仅是全零!

10-07 13:15