将对象转换为 ByteArray 后对象大小发生变化
Object Size changed after converting an object to ByteArray
我有一种方法可以将对象转换为 byte[],以便在浏览器中填充 PDF。我可以完美地看到内联 PDF,但是如果我单击 "Save" 按钮并打开从本地下载的文件,它会给我以下消息:
"Adobe Reader could not open xx.pdf because it is either not a supported file type or because the file has been damaged (for example, it was sent as an email attachment and wasn't correctly decoded)"
我发现数据类型转换期间的数据大小差异可能会导致问题。从数据库中拉出的pdfDataObject大小为{byte[1111161]},与入库前大小相同;转换后的pdfdata为{byte[1111189]},在转换过程中增加了28个字节。
数据库中pdf的数据类型为varbinary(max)
public byte[] populated_PDF(string args)
{
DataTable dt = new DataTable();
//sqlconnection to get data
var pdfDataObject = dt.Rows[0]["PDF_DATA"];
// get the Varbinary datatype from database
// The Data Size of pdfDataObject is {byte[1111161]}
byte[] pdfdata = ObjectToByteArray(pdfDataObject);
// The Data Size of pdfdata is {byte[1111189]}
return pdfdata;
}
对象到 ByteArray 方法
private byte[] ObjectToByteArray(Object obj)
{
if (obj == null)
{
return null;
}
var bf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
bf.Serialize(ms, obj);
return ms.ToArray();
}
}
两种数据大小的PDF都可以在浏览器中显示。但是,如果应用 "Save",数据大小为 {byte[1111189]} 的数据不能从本地打开,而数据大小为 {byte[1111161]} 的数据可以。
好像ObjectToByteArray方法添加了一些东西,导致在转换过程中无法打开本地下载的PDF。
不知道怎么解决。有什么想法吗?
您正在通过特定于 .NET 的序列化程序 (BinaryFormatter
) 传递 PDF 字节...这种操作改变结果并不奇怪,因为它在 PDF 之上添加了一个序列化层.剥离它。
这应该可以很好地完成工作:
return (byte[])dt.Rows[0]["PDF_DATA"];
我有一种方法可以将对象转换为 byte[],以便在浏览器中填充 PDF。我可以完美地看到内联 PDF,但是如果我单击 "Save" 按钮并打开从本地下载的文件,它会给我以下消息:
"Adobe Reader could not open xx.pdf because it is either not a supported file type or because the file has been damaged (for example, it was sent as an email attachment and wasn't correctly decoded)"
我发现数据类型转换期间的数据大小差异可能会导致问题。从数据库中拉出的pdfDataObject大小为{byte[1111161]},与入库前大小相同;转换后的pdfdata为{byte[1111189]},在转换过程中增加了28个字节。
数据库中pdf的数据类型为varbinary(max)
public byte[] populated_PDF(string args)
{
DataTable dt = new DataTable();
//sqlconnection to get data
var pdfDataObject = dt.Rows[0]["PDF_DATA"];
// get the Varbinary datatype from database
// The Data Size of pdfDataObject is {byte[1111161]}
byte[] pdfdata = ObjectToByteArray(pdfDataObject);
// The Data Size of pdfdata is {byte[1111189]}
return pdfdata;
}
对象到 ByteArray 方法
private byte[] ObjectToByteArray(Object obj)
{
if (obj == null)
{
return null;
}
var bf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
bf.Serialize(ms, obj);
return ms.ToArray();
}
}
两种数据大小的PDF都可以在浏览器中显示。但是,如果应用 "Save",数据大小为 {byte[1111189]} 的数据不能从本地打开,而数据大小为 {byte[1111161]} 的数据可以。
好像ObjectToByteArray方法添加了一些东西,导致在转换过程中无法打开本地下载的PDF。
不知道怎么解决。有什么想法吗?
您正在通过特定于 .NET 的序列化程序 (BinaryFormatter
) 传递 PDF 字节...这种操作改变结果并不奇怪,因为它在 PDF 之上添加了一个序列化层.剥离它。
这应该可以很好地完成工作:
return (byte[])dt.Rows[0]["PDF_DATA"];