我正在尝试将存储在sql列中的文件内容转换为pdf。
我使用下面的代码:
byte[] bytes;
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, fileContent);
bytes = ms.ToArray();
System.IO.File.WriteAllBytes("hello.pdf", bytes);
生成的pdf在某种意义上是损坏的,当我在notepad++中打开pdf时,我看到一些垃圾头(无论fileContent如何,都是相同的)。垃圾头是NUL SOH NUL NUL NUL ....
您不应该使用BinaryFormatter
-这是用于将。net类型序列化为二进制文件,以便它们可以再次作为。net类型读取。
如果它被存储在数据库中,希望,作为一个varbinary
-然后所有你需要做的是得到字节数组从(这将取决于你的数据访问技术- EF和Linq Sql,例如,将创建一个映射,使它琐碎的得到一个字节数组),然后写到文件,你在你的最后一行代码。
有任何运气-我希望fileContent
这里是字节数组?在这种情况下,你可以直接输入
System.IO.File.WriteAllBytes("hello.pdf", fileContent);
如果字节数组有问题,通常会发生这种情况。
File.WriteAllBytes("filename.PDF", Byte[]);
创建一个新文件,将指定的字节数组写入该文件,然后关闭该文件。如果目标文件已经存在,则覆盖该文件。
异步实现也是可用的。
public static System.Threading.Tasks.Task WriteAllBytesAsync
(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = null);