我正在研究一些代码,以便从Dynamics CRM电子邮件附件中读出BODY字段并将Base64字符串解码为要写入的文件到文件系统。来自Dynamics CRM的PDF blob数据的Base-64字符数组或字符串的无效长度
这个过程似乎像。PNG等时,Excel的.xls等图像文件做工精细,但当我试着和PDF文件转换为C#中的字节数组我得到的错误:
无效的长度Convert.FromBase64String()行上的Base-64字符数组或字符串。
var binaryData = File.ReadAllText(@"E:\test\stream.txt");
byte[] byteArray = Convert.FromBase64String(binaryData);
File.WriteAllBytes(@"E:\test\file.pdf", byteArray);
我试过将binarydata存储在一个文件中并读取它,以及只是定义一个带有内容的C#字符串。正如我所说,它适用于其他文件类型,但不是PDF。
但溶液通过字节数组只是循环和单独写每个字节,它仍然在一个腐败的PDF文件,结束了和Acrobat惯于开放。
最终,我会从数据库字段或通过CRM API读取binaryData,但我只是想先测试理论,我似乎是对所有类型的附件,除了PDF好...
一篇文章,我看到说,尝试填充二进制数据之前,转换为一个字节数组..我尝试了类似于下面,我得到过去的转换错误,但PDF仍然损坏:字符串dummyData = b.Trim() .Replace(“”,“+”);如果(dummyData.Length%4> 0)dummyData = dummyData,则为 。PadRight(dummyData.Length + 4 - dummyData.Length%4,'='); byte [] byteArray = Convert.FromBase64String(dummyData); –
处理字节和处理文本在编程中是完全不同的任务。当您将文本转换为字节(反之亦然)时,程序将根据关于编码,字节顺序和本地化的假设来格式化字节,这里举几个例子。除非绝对需要将文件转换为文本,否则应从开始到结束将文件视为字节数组。 – Abion47