c#中文件上传的'system.outofmemoryexception'异常

时间:2015-02-17 13:13:06

标签: c# file-upload

我正在尝试使用CSOM从Web服务上传一个400Mb的共享点库中的文件并获取错误&system; out.memoryexception' 。代码在小尺寸文件中正常工作。

我的代码如下所示

    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;
    }

提前感谢..

1 个答案:

答案 0 :(得分:0)

您可以尝试使用FileStream,它只在内存中保存一小块字节缓冲区而不是现在正在执行的整个文件。

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