2016-08-03 69 views
1

我能够上传文档,但是当我查看/下载文档时,似乎出现错误。它说它打开这个PDF时遇到了问题。 Ran into a problem从CRM上传文档正文到SharePoint注释C#

我有以下代码

using (var stream = new System.IO.MemoryStream()) 
{ 
    byte[] myByte = System.Text.ASCIIEncoding.Default.GetBytes(documentBody); 
    foreach (byte element in myByte) 
    { 
     stream.WriteByte(element); 
    } 
    stream.Seek(0, SeekOrigin.Begin); 
    var newFile = new FileCreationInformation { Url = fileName, ContentStream = stream, Overwrite = true }; 

    file = list.RootFolder.Files.Add(newFile); 
    file.CheckOut(); 
    file.CheckIn(string.Empty, CheckinType.MajorCheckIn); 
    context.Load(file); 
    context.ExecuteQuery(); 
} 

documentBody是场documentbodyAnnotation(注)。 stream有什么问题吗?

+0

所以你想通过从documentBody,这是一个简单的字符串写入字节来创建一个PDF?如果你想创建一个PDF,它需要遵循[这里]描述的格式(http://www.adobe.com/content/dam/Adobe/en/technology/pdfs/PDF_Day_A_Look_Inside.pdf)。 – rene

+0

谢谢@rene,但我使用'documentbody'作为字符串将SharePoint文档复制到CRM Notes,我可以很好地查看它。它还适用,此外,我不是从头创建一个PDF ... –

+0

除了低效率,这个代码没有太大的错误。什么是文件名?在那个文档里,只有纯文本?但你希望返回PDF? – rene

回答

1

documentBody是CRM中的Base64编码,因此您需要在保存到SharePoint之前先解码它。

试试这个来获取文档数据。

byte[] data = Convert.FromBase64String(e.Attributes["documentbody"].ToString());

+0

谢谢!有效!不过,我相信这个限制的长度是2,147,483,647。很好的通用文件不超过2GB,所以我认为这足够了。 –