public async Task <DocumentUpdateResult> UpdateBookmrkValue(string documentId, IEnumerable <DestinationPoint> destinationPoints, string value) { DocumentUpdateResult retValue = new DocumentUpdateResult() { IsSuccess = true }; try { string authHeader = GetAuthorizationHeader(); DocumentCheckResult documentResult = await GetDocumentUrlByID(new DocumentCheckResult() { DocumentId = documentId }); if (documentResult.IsSuccess) { FileContextInfo fileContextInfo = await GetFileContextInfo(authHeader, documentResult.DocumentUrl); var stream = await GetFileStream(authHeader, documentResult.DocumentUrl, fileContextInfo); stream.Seek(0, SeekOrigin.Begin); UpdateStream(destinationPoints, value, stream, retValue); await UploadStream(authHeader, documentResult.DocumentUrl, stream, fileContextInfo); return(retValue); } else { retValue.IsSuccess = false; retValue.Message.Add(documentResult.Message); } } catch (Exception ex) { retValue.IsSuccess = false; retValue.Message.Add(ex.ToString()); } return(retValue); }
static private async Task <Stream> GetFileStream(string authHeader, string destinationFileName, FileContextInfo fileContextInfo) { var filePath = new Uri(destinationFileName).AbsolutePath; var stream = new System.IO.MemoryStream(); try { using (var client = new WebClient()) { client.Headers.Add(HttpRequestHeader.Authorization, authHeader); var fileUri = new Uri(destinationFileName); var downloadData = await client.DownloadDataTaskAsync($"{fileContextInfo.WebUrl}/_api/web/getfilebyserverrelativeurl('{filePath}')/$value"); await stream.WriteAsync(downloadData, 0, downloadData.Length); return(stream); } } catch (Exception ex) { stream.Dispose(); throw ex; } }
static private async Task UploadStream(string authHeader, string destinationFileName, Stream stream, FileContextInfo contextInfo) { var fileAbsolutePath = new Uri(destinationFileName).AbsolutePath; int index = fileAbsolutePath.LastIndexOf('/'); var filePath = fileAbsolutePath.Substring(0, index); var fileName = fileAbsolutePath.Substring(index + 1); using (var client = new WebClient()) { client.Headers.Add(HttpRequestHeader.Authorization, authHeader); client.Headers.Add(HttpRequestHeader.Accept, "application/json"); var uploadUri = new Uri($"{contextInfo.WebUrl}/_api/web/GetFolderByServerRelativeUrl(@filePath)/Files/add(url='{fileName}',overwrite=true)?@filePath='{filePath}'"); var returnValue = await client.UploadDataTaskAsync(uploadUri, "POST", (stream as MemoryStream).ToArray()); } }