2013-02-25 7 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 мегабайт.

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 работает некорректно, поскольку файлы cookie FedAuth никогда не привязаны к запросу 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

в соответствии с Microsoft, вы должны также добавить заголовок X-HTTP-метод с «PUT» в качестве значения http://msdn.microsoft.com /en-us/library/ff798339.aspx –