2016-08-03 5 views
1

文書をアップロードすることはできますが、閲覧/ダウンロードしているときにエラーがあるようです。このPDFを開く際に問題が発生したとのことです。 Ran into a problemCRM本体から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を持っているがAnnotationからフィールドdocumentbody(注)です。 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'を使用してCRM文書にSharePoint文書をコピーしました。それはまだ適用されますか、私は一からPDFを作成していません... –

+0

非効率のほかにこのコードではあまり間違っていません。ファイル名は何ですか?そしてその文書の中にただの平文がありますか?しかし、あなたはPDFを返すことを期待していますか? – rene

答えて

1

documentBodyは、CRMでBase64でエンコードされているため、SharePointに保存する前にまずデコードする必要があります。

これを試してドキュメントデータを入手してください。

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

+0

ありがとうございます!出来た!しかし、私はこれの限界の長さは2,147,483,647だと思う。よくあるファイルは2GBを超えないので、これで十分です。 –