[英]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();
}
除此之外,我還必須:
最終結果是:
對不起,但我通常在波蘭工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.