zoukankan      html  css  js  c++  java
  • SharePoint下载大文件失败 异常信息: system.OutOfMemoryException

    最近写了个winform的项目,里面有个功能是从SharePoint文档库中同步文件到本地。所以,毫无疑问,首先想到的就是用SharePoint 的 web service来实现了,即Copy.asmx,并调用Copy.GetItem()方法来实现。

    代码如下:

            public static void CopyfileToLocal(string strSiteUrl,string strFileUrl, string strFilePath)
            {
                using (Copy copyFile = new Copy())
                {
                    if (AdminNwc == null)
                    {
                        return;
                    }
                    copyFile.Credentials = AdminNwc;
                    copyFile.Url = strSiteUrl.Trim('/') + @"/_vti_bin/Copy.asmx";
                   FieldInformation fileInfo = new FieldInformation();
    
                    FieldInformation[] fileInfoArray = { fileInfo };
                    byte[] fileContents;
                    copyFile.GetItem(strFileUrl, out fileInfoArray, out fileContents);
                    
                   
                }
            }

    代码是完美的,同步文件也是正常的。但是... .. 正常仅限与小文件,对于大文件(测试了个200M的文件)却抛了异常,如下所示:

    image

    唉,实在是禁不起检验啦,没办法,只得另谋出路。

    既然异常是:System.OutOfMemoryException 那么,就是内存溢出之类的问题咯,在网上搜了下,原来在使用 web service的copy.asmx的方法下载文档时,的确有内存溢出的问题。所以立马更换另一种方法解决问题,代码如下:

    
          public static void CopyStream(Stream input, Stream output)
          { 
                byte[] buffer = new byte[8 * 1024]; 
                int len; 
                while ((len = input.Read(buffer, 0, buffer.Length)) > 0) { 
                    output.Write(buffer, 0, len); 
                } 
            } 
      
            protected void Page_Load(object sender, EventArgs e)
            {
                string url = "Http://moss2007:1234/documentlibrary/test.jpg";
                WebRequest request = WebRequest.Create(new Uri(url, UriKind.Absolute));
                request.UseDefaultCredentials = true;
                WebResponse response = request.GetResponse();
                Stream fs = response.GetResponseStream() as Stream;
                 
                using (FileStream localfs = File.OpenWrite(@"c:\temp\test.jpg"))
                {
                    CopyStream(fs, localfs);
                }
            }

    很神奇,问题解决了。

    感谢网上的大神帮忙找资料,助我度过难关,相关的两个帖子地址如下:

    http://bbs.csdn.net/topics/390407269

    http://q.cnblogs.com/q/48101/

    作者: 鄂溪子——每天进步一点点……

    出处:http://qixing_gan.cnblogs.com/

    版权:本文版权归作者和博客园共有,欢迎转载,但必须保留作者版权,并给出原文链接,谢谢合作!

  • 相关阅读:
    常见RGB透明度对照表在这
    Android节假日图标动态替换方案
    用两个栈实现队列
    从头到尾打印链表 (链表/栈)
    MySQL常用函数
    找出数组中重复的数字
    两数之和
    java的list的几种排序写法整理(sort的用法)
    Java知识目录
    通过关键词来推荐话题
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/3016760.html
Copyright © 2011-2022 走看看