将大文件上传到Sharepoint Server 2013

时间:2019-07-07 11:51:57

标签: c# sharepoint

我正在尝试将大约1GB的文件上传到 sharepoint 2013 ,我降级了a NetBeans bug they say they had fixed,并尝试使用Microsoft.SharePoint2013.CSOM,但是没有这样的方法“ StartUpload”(编译错误)。

1 个答案:

答案 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的文件,几乎可以整天访问该文件。请参阅: enter image description here

有趣的是,这只花了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();
    }

除此之外,我还必须:

  • 扩展此Web应用程序在CA上的最大文件上传量,
  • 在CA上为此Web应用程序设置“网页安全验证”,从不设置(在此link中,有一个如何设置它的屏幕)
  • 延长IIS上的超时时间

最终结果是:

对不起,但我通常在PL工作

enter image description here