2015-02-17 3 views
1

Я пытаюсь загрузить файл с 400Mb в библиотеке sharepoint из веб-службы с использованием CSOM и получить сообщение об ошибке «system.outofmemoryexception». код работает отлично с файлом небольшого размера.Исключение system.outofmemoryexception при загрузке файла в C#

мой код, как показано ниже

try 
    { 

     HttpContext postedContext = HttpContext.Current; 
     HttpFileCollection Files = postedContext.Request.Files; 
     string listTitle = postedContext.Request.Form["listTitle"]; 
     string Industry = postedContext.Request.Form["Industry"]; 

     if (Files.Count == 1 && Files[0].ContentLength > 0) 
     { 
      string fileName = Files[0].FileName; 
      string docTitle = Files[0].FileName; 
      byte[] binaryWriteArray = new byte[Files[0].InputStream.Length]; 
      string timestamp = string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now); 
      fileName = timestamp + "_" + fileName; 

      Files[0].InputStream.Read(binaryWriteArray, 0, 
      (int)Files[0].InputStream.Length); 

      ClientContext context = getContext(); 

      List documentsList = context.Web.Lists.GetByTitle(listTitle); 
      context.Load(documentsList.RootFolder); 
      context.ExecuteQuery(); 

      var fileCreationInformation = new FileCreationInformation(); 

      fileCreationInformation.Content = binaryWriteArray; 


      fileCreationInformation.Overwrite = true; 
      //Upload URL 

      fileCreationInformation.Url = String.Format("{0}/{1}", documentsList.RootFolder.ServerRelativeUrl, fileName); 
      Microsoft.SharePoint.Client.File uploadFile = documentsList.RootFolder.Files.Add(
       fileCreationInformation); 


      uploadFile.ListItemAllFields["ToolId"] = Convert.ToString(postedContext.Request.Form["toolId"]); 
      uploadFile.ListItemAllFields["Industry"] = Convert.ToString(postedContext.Request.Form["Industry"]); 
      uploadFile.ListItemAllFields["Title"] = docTitle; 

      uploadFile.ListItemAllFields.Update(); 
      context.ExecuteQuery(); 


      return true; 
     } 
     else 
     { 
      return false; 
     } 



    } 
    catch (Exception ex) 
    { 
     General.BindErrorLog(ex); 
     return false; 
    } 

заранее спасибо ..

ответ

0

Вы можете попробовать использовать FileStream, который содержит только небольшой буфер байтов в памяти, а не весь файл, как вы делаешь сейчас.

How can I read/stream a file without loading the entire file into memory?

+0

Я перепробовал все варианты и сохраненные данные во фрагменте, но по-прежнему дает ту же ошибку. –

Смежные вопросы