2

这就是我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 时,我收到了此消息

PDF 显示

我的obj回报喜欢

字节2

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

在此处输入图像描述

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

4

2 回答 2

0

在我看来,您只是在创建一个具有正确长度 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 文件全部为二进制零的症状,或者如果您使用的是流,则流的位置位于末尾。在将字节数组或流发送到管道之前,您可以通过在调试中运行并检查字节数组或流的内容来轻松确定是否是这种情况。检查长度和内容,它应该看起来像二进制,而不仅仅是全零!

于 2013-06-04T06:54:01.000 回答
0

最后,这对我有用:)

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

pdfFile = obj.ToArray();

 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();
   }
于 2013-06-04T10:32:41.913 回答