簡體   English   中英

將大文件上傳到Sharepoint Server 2013

[英]Upload large files to sharepoint server 2013

我嘗試將大約1GB的文件上傳到prem上的sharepoint 2013 ,我將Microsoft.SharePoint2013.CSOM下移,並嘗試使用UploadFileSlicePerSlice,但是沒有這樣的方法“ StartUpload”(編譯錯誤)。

我不是在這里發布這個問題的答案嗎?

在您發布的同一篇文章中,還提到了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條件,可能不需要這樣做,但是我有一個小錯誤,必須以這種方式解決它:)):



    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

可以在SP 2013上上傳1GB文件的最終代碼(與SharePoint CSOM 2013的nuget一起使用)是:



    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應用程序設置“從不”上的“網頁安全驗證”(在此鏈接中,有一個如何設置它的屏幕)
  • 延長IIS的超時

最終結果是:

對不起,但我通常在波蘭工作

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM