鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > .net技术 > vs2010 > >

SharePoint下载大文件失败 异常信息: system.OutOfMemoryExcept

来源:互联网 作者:佚名 时间:2013-06-19 11:38
SharePoint下载大文件失败 异常信息: system.OutOfMemoryExceptionPosted on 最近写了个winform的项目,里面有个功能是从SharePoint文档库中同步文件到本地。所以,毫无疑问,首先想到的就是用SharePoint 的 web service来实现了,即Copy.asmx,并调用Copy.

SharePoint下载大文件失败 异常信息: system.OutOfMemoryException Posted on

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

 

代码如下:

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的方法下载文档时,的确有内存溢出的问题。所以立马更换另一种方法解决问题,代码如下:

Download documents from SharePoint Document Library 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 = ":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); } }

 

很神奇,问题解决了。

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

网友评论
<