2015-11-09 3 views
0

Я хочу загрузить большие файлы в sahrepoint онлайн, но я не могу использовать chunked upload sharepoint REST api. Я бы хотел увидеть рабочий пример.Использование chunked upload/StartUpload с sharepoint REST api

API-интерфейс описан здесь https://msdn.microsoft.com/EN-US/library/office/dn450841.aspx#bk_FileStartUpload с использованием методов

startUpload (GUID, Stream1) continueUpload (GUID, 10 МБ, stream2)
continueUpload (GUID, 20 МБ, stream3)
finishUpload (GUID, 30 MB, Stream4)

я нашел тот же самый вопрос в https://social.msdn.microsoft.com/Forums/sqlserver/en-US/5596f87a-3155-4e4f-a6e8-8d38fa5e580d/office-365-onedrive-for-businesssharepoint-rest-api-startupload-command?forum=appsforsharepoint

, но решение использует C#, и мне нужен REST.

ответ

0

Следующая C# пример показывает, как переписать существующий файл, с помощью StartUpload, ContinueUpload и FinishUpload REST конечных точек:

using (var client = new WebClient()) 
{ 
    client.BaseAddress = webUri; 
    client.Credentials = GetCredentials(webUri, userName, password); 
    client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f"); 
    client.Headers.Add("X-RequestDigest", RequestFormDigest()); 

    var fileUrl = "/Documents/SharePoint User Guide.docx"; 
    var endpointUrlS = string.Format("{0}/_api/web/getfilebyserverrelativeurl('{1}')/savebinarystream", webUri, fileUrl); 
    var fileContent = System.IO.File.ReadAllBytes(fileName); 

    var firstChunk = true; 
    var uploadId = Guid.NewGuid(); 
    var offset = 0L; 
    const int chunkSize = 2048; //<-set chunk size (bytes) 
    using (var inputStream = System.IO.File.OpenRead(fileName)) 
    { 
     var buffer = new byte[chunkSize]; 
     int bytesRead; 
     while ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0) 
     { 
       if (firstChunk) 
       { 
        var endpointUrl = string.Format("{0}/_api/web/getfilebyserverrelativeurl('{1}')/startupload(uploadId=guid'{2}')", webUri, fileUrl,uploadId); 
        client.UploadData(endpointUrl, buffer); 
        firstChunk = false;       
       } 
       else if (inputStream.Position == inputStream.Length) 
       { 
        var endpointUrl = string.Format("{0}/_api/web/getfilebyserverrelativeurl('{1}')/finishupload(uploadId=guid'{2}',fileOffset={3})", webUri, fileUrl, uploadId,offset); 
        var finalBuffer = new byte[bytesRead]; 
        Array.Copy(buffer , finalBuffer , finalBuffer.Length); 
        client.UploadData(endpointUrl, finalBuffer); 
       } 
       else 
       { 
        var endpointUrl = string.Format("{0}/_api/web/getfilebyserverrelativeurl('{1}')/continueupload(uploadId=guid'{2}',fileOffset={3})", webUri, fileUrl, uploadId, offset); 
        client.UploadData(endpointUrl, buffer); 
       } 
       offset += bytesRead; 
       Console.WriteLine("%{0:P} completed", (((float)offset/(float)inputStream.Length))); 
      } 
     } 
} 
  • Для потребляющих REST интерфейс SharePoint WebClient class используется, в частности UploadData Method для загрузка данных.
  • GetCredentials.cs - метод для получения онлайн-учетных данных SharePoint
  • SharePoint REST POST запросов требует известного переваривать, RequestFormDigest предназначен для этой цели (вы могли бы найти реализацию этого here)

Результат

enter image description here

Смежные вопросы