2013-02-25 86 views
1

我正在使用CSOM將文件上傳到Sharepoint 365網站。上傳大文件到Sharepoint 365

我已經登錄成功地使用基於聲明的身份驗證在這裏找到方法「http://www.wictorwilen.se/Post/How-to-do-active-authentication-to-Office-365-and-SharePoint-Online.aspx

但使用SaveBinaryDirect在ClientContext失敗,405由於餅乾被連接到請求爲時已晚。

使用CSOM上傳文件的另一種方法與以下類似。但是對於SP 365,這會將文件大小限制在3 meg左右。

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兆?

回答

1

那麼,我還沒有找到一種方法來處理CSOM,這真是令人生氣。

SEvans在http://www.wictorwilen.se/Post/How-to-do-active-authentication-to-Office-365-and-SharePoint-Online.aspx的評論中發佈瞭解決方法。

基本上只是做一個http放,並從基於聲明的身份驗證附加cookie集合。 SEvans公佈的解決方法是低於


偉大的代碼Wichtor。正如其他人所指出的那樣,SaveBinaryDirect無法正常工作,因爲FedAuth cookie從未附加到該方法生成的HTTP PUT請求。

這裏是我的解決方法 - 希望這有助於一些你:

// "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(); 
+0

根據微軟還應該增加一個X-HTTP-法頭「PUT」的值http://msdn.microsoft.com /en-us/library/ff798339.aspx – 2014-03-23 17:05:40