1

CSOM を使用して、Sharepoint 365 サイトにファイルをアップロードしています。

ここにある方法を使用して、クレーム ベースの認証で正常にログインできました "

ただし、ClientContext で SaveBinaryDirect を使用すると、Cookie がリクエストに添付されるのが遅すぎるため、405 で失敗します。

CSOM を使用してファイルをアップロードする別の方法は、次のようになります。しかし、SP 365 では、これによりファイル サイズが約 3 MB に制限されます。

 var newFileFromComputer = new FileCreationInformation
                {
                    Content = fileContents,
                    Url = Path.GetFileName(sourceUrl)
                };


 Microsoft.SharePoint.Client.File uploadedFile = customerFolder.Files.Add(newFileFromComputer);
                    context.Load(uploadedFile);
                    context.ExecuteQuery();

CSOM、SP 365、および最大 100 MB のファイル サイズを使用してこれを行う方法はありますか?

4

2 に答える 2

1

まあ、私は CSOM でそれを行う方法を見つけていません。それは本当に腹立たしいです。

http://www.wictorwilen.se/Post/How-to-do-active-authentication-to-Office-365-and-SharePoint-Online.aspxのコメントで、SEvans によって回避策が投稿されました。

基本的には、http put を実行して、クレーム ベース認証からの Cookie コレクションを添付するだけです。SEvansが投稿した回避策は以下のとおりです


コードウィクターの素晴らしい作品。他の人が指摘しているように、メソッドが生成する HTTP PUT 要求に FedAuth Cookie が添付されないため、SaveBinaryDirect は正しく機能しません。

これが私の回避策です:

// "url" is the full destination path (including filename, i.e. https://mysite.sharepoint.com/Documents/Test.txt) 

// "cookie" is the CookieContainer generated from Wichtor's code 
// "data" is the byte array containing the files contents (used a FileStream to load) 

System.Net.ServicePointManager.Expect100Continue = false; 
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; 
request.Method = "PUT"; 
request.Accept = "*/*"; 
request.ContentType = "multipart/form-data; charset=utf-8"; 
request.CookieContainer = cookie; request.AllowAutoRedirect = false; 
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; 
request.Headers.Add("Accept-Language", "en-us"); 
request.Headers.Add("Translate", "F"); request.Headers.Add("Cache-Control", "no-cache"); request.ContentLength = data.Length; 

using (Stream req = request.GetRequestStream()) 
{ req.Write(data, 0, data.Length); } 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
Stream res = response.GetResponseStream(); 
StreamReader rdr = new StreamReader(res); 
string rawResponse = rdr.ReadToEnd(); 
response.Close();
rdr.Close();
于 2013-02-27T14:36:49.340 に答える