2016-06-24 2 views
0

Я применил конечную точку putFile для клиента WOPI (т. Е. Office Online) Когда вы нажимаете кнопку «Изменить документ», какой должен быть первый запрос на WOPI-клиент?Редактирующий документ WOPI

Я назвал следующий URL на ссылку Изменить:

POST https://word-edit.officeapps-df.live.com/we/wordviewerframe.aspx?WOPISrc=https://domain/WOPI_IntegrationDemo/wopi/files/Sample_application_content3.docx/ 

Но документ говорит, что он будет выполнять запрос на блокировку первым. Что это значит?

ответ

0

С вашего вопроса я понимаю, что вы внедряете WOPI-узел. URL-адрес выглядит довольно хорошо - просто убедитесь, что параметр WOPISrc экранирован, и вы включаете параметр access_token.

Когда вы нажимаете на URL-адрес, вы указываете клиенту WOPI (OO/OWA) загрузить поле, определенное WOPISrc из узла WOPI.

Клиент WOPI обычно пытается сначала получить блокировку (эксклюзивный доступ на запись) от узла WOPI. Для этих целей вам необходимо выполнить операцию LOCK на вашем WOPI-хосте в соответствии с documentation.

0

Сначала вы должны добавить токен доступа для этого , тогда вы пытаетесь перевести его в текстовое сообщение на 1.get file info. Get [Route ("files/{name} /")] 2.post файл. Post [Route ("files/{name} /")] вслушать, что вам нужно реализовать ответ для файлов блокировки. Запрос Cobalt var response = new HttpResponseMessage (HttpStatusCode.OK); , если (xWopiOverride == "LOCK" || String.equals (xWopiOverride, "UNLOCK")) { // для DOCX, XLSX и PPTX ответ = новый HttpResponseMessage (HttpStatusCode.OK); } еще если (String.equals (xWopiOverride, "кобальтовых")) { // кобальт, для DOCX и PPTX

   EditSession editSession = EditSessionManager.Instance.GetSession(access_token); 
       if (editSession == null) 
       { 
        editSession = new FileSession(access_token, fileInfo, matterInfo, dpsUserName, databaseInfo, string.Empty, string.Empty, string.Empty, false); 
        EditSessionManager.Instance.AddSession(editSession); 
       } 

       var memoryStream = new MemoryStream(); 
       HttpContext.Current.Request.InputStream.CopyTo(memoryStream); 
       var atomFromByteArray = new AtomFromByteArray(memoryStream.ToArray()); 

       ProtocolVersion protocolVersion; 
       object context; 
       var requestBatch = new RequestBatch(); 
       requestBatch.DeserializeInputFromProtocol(atomFromByteArray, out context, out protocolVersion); 
       editSession.ExecuteRequestBatch(requestBatch); 

       foreach (var request in requestBatch.Requests) 
       { 
        if (request.GetType() == typeof(PutChangesRequest) && request.PartitionId == FilePartitionId.Content) 
        { 
         editSession.Save(); 
         break; 
        } 
       } 

       var responseContent = requestBatch.SerializeOutputToProtocol(protocolVersion, context); 
       var correlationId = Request.Headers.GetValues("X-WOPI-CorrelationID").First(); 

       response.Headers.Add("X-WOPI-CorrelationID", correlationId); 
       response.Headers.Add("request-id", correlationId); 

       var pushStreamContent = new PushStreamContent((outputStream, httpContext, transportContent) => 
       { 
        responseContent.CopyTo(outputStream); 
        outputStream.Close(); 
       }); 

       response.Content = pushStreamContent; 
       response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
       response.Content.Headers.ContentLength = responseContent.Length; 
      } 
      return response; 
+0

пар это https://github.com/petrsvihlik/WopiHost –

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