我正在尝试将大约1GB的文件上传到 sharepoint 2013 ,我降级了a NetBeans bug they say they had fixed,并尝试使用Microsoft.SharePoint2013.CSOM,但是没有这样的方法“ StartUpload”(编译错误)。
答案 0 :(得分:0)
我不是在这里发布这个问题的答案吗? post吗?
在您发布的同一篇文章中,还提到了SaveBinaryDirect方法,该方法适用于大文件,并且肯定存在于您发布的nuget中。
请尝试以下操作:
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("start");
using (ClientContext context = new ClientContext("[SITECOLLECTION URL]"))
{
using (FileStream fs = new FileStream(@"[PATH TO FILE LIKE C:\test.png]", FileMode.Open))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, "/[LIB NAME FROM URL LIKE 'DOCUMENTS']/" + "[FILE NAME LIKE 'test.png']", fs, true);
}
}
Console.WriteLine("end");
}
catch (Exception ex)
{
Console.WriteLine("error -> " + ex.Message);
}
finally
{
Console.ReadLine();
}
}
}
更新
我现在设法在SP2016上使用此方法上传了一个470 MB的文件,几乎可以整天访问该文件。请参阅:
有趣的是,这只花了3分钟即可上传文件(在SP2016上)。这是非常奇怪的,因为白天(当我可以访问SP2013时)我今天早晨尝试使用此方法在SP2013上载200MB文件,并且花了超过1个小时的时间才完成了:)...我不知道为什么会有如此大的差异。当我离开时,0.5GB的文件还在上传过程中。明天早上我会告诉你,它完成了,花了多少时间。我认为该方法通常有效(并且对于SP2016可以超快速地工作),问题出在SP2013中,它非常慢,并且在您提到的“挂起”中保持很长的时间。
如果有时间的话,我将使用File类上的StartUpload,ContinueUpload和FinishUpload方法查看第三种方法,但我不确定SP CSOM 2013是否支持该方法。
更新2
经过多次尝试在SP2013上载,我终于得到了一些结果。我注意到的是,如果我们首先获取byte []数组,然后使用它来获取文件流并将其用于SaveBinaryDirect()方法,则上传确实非常快,并且不会挂起。请为SP2013尝试一种与我发布的方法非常相似的方法,但是要这样(注意字节数组和context.HasPendingRequests条件,可能不需要这样做,但是我有一个小错误,必须以这种方式解决它:)):< / p>
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("start " + DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString());
using (ClientContext context = new ClientContext("[SITECOLLECTION URL]"))
{
context.RequestTimeout = -1;
Web web = context.Web;
if (context.HasPendingRequest)
context.ExecuteQuery();
byte[] fileBytes = System.IO.File.ReadAllBytes(@"[PATH TO FILE LIKE C:\test.png]");
using (var fileStream = new System.IO.MemoryStream(fileBytes))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, "/[LIB NAME FROM URL LIKE 'DOCUMENTS']/" + "[FILE NAME LIKE 'test.png']", fileStream, true);
}
}
Console.WriteLine("end " + DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString());
}
catch (Exception ex)
{
Console.WriteLine("error -> " + ex.Message);
}
finally
{
Console.ReadLine();
}
}
}
这次我希望它会成功
更新3
(在SharePoint CSOM 2013中使用nuget)可以在SP 2013上上传1GB文件的最终代码是:
try
{
Console.WriteLine("start " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString());
using (ClientContext context = new ClientContext("[URL]"))
{
context.Credentials = new NetworkCredential("[LOGIN]","[PASSWORD]","[DOMAIN]");
context.RequestTimeout = -1;
Web web = context.Web;
if (context.HasPendingRequest)
context.ExecuteQuery();
byte[] fileBytes;
using (var fs = new FileStream(@"D:\OneGB.rar", FileMode.Open, FileAccess.Read))
{
fileBytes = new byte[fs.Length];
int bytesRead = fs.Read(fileBytes, 0, fileBytes.Length);
}
using (var fileStream = new System.IO.MemoryStream(fileBytes))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, "/Shared Documents/" + "OneGB.rar", fileStream, true);
}
}
Console.WriteLine("end " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString());
}
catch (Exception ex)
{
Console.WriteLine("error -> " + ex.Message);
}
finally
{
Console.ReadLine();
}
除此之外,我还必须:
最终结果是:
对不起,但我通常在PL工作