2016-06-24 16 views
0

Ich habe den putFile-Endpunkt für den WOPI-Client implementiert (d. H. Office Online) Wenn Sie auf die Schaltfläche Dokument bearbeiten klicken, was soll die erste Anfrage an den WOPI-Client gehen?WOPI-Dokument bearbeiten

Ich habe folgende URL auf Link Bearbeiten genannt:

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

Aber Dokument besagt, dass es zunächst eine Sperranforderung durchführen werde. Was bedeutet es genau?

Antwort

0

Von Ihrer Frage aus verstehe ich, dass Sie einen WOPI-Host implementieren. Die URL sieht ziemlich gut aus - stellen Sie nur sicher, dass der Parameter WOPISrc maskiert ist und dass Sie den Parameter access_token einschließen.

Wenn Sie auf die URL klicken, wird der WOPI-Client (OO/OWA) angewiesen, ein von WOPISrc definiertes Feld vom WOPI-Host zu laden.

Der WOPI-Client versucht normalerweise zuerst eine Sperre (exklusiven Schreibzugriff) vom WOPI-Host zu erhalten. Zu diesem Zweck sollten Sie die LOCK-Operation in Ihrem WOPI-Host gemäß der documentation implementieren.

0

Zuerst müssen Sie Access-Token für diese hinzufügen, dann versuchen Sie, es zu bearbeiten, rufen Sie 1.get Datei Info. Get [Route ("files/{name} /")] 2.post-Datei. Post [Route ("files/{name} /")] in hören Sie müssen Antwort für Lock-Dateien implementieren Cobalt Request var Antwort = neue HttpResponseMessage (HttpStatusCode.OK); if (xWopiOverride == "LOCK" || String.Equals (xWopiOverride "UNLOCK")) { // für docx, xlsx und pptx response = neue HttpResponseMessage (HttpStatusCode.OK); } else if (String.Equals (xWopiOverride "cobalt")) { // Kobalt, für docx und 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

Brach diese https://github.com/petrsvihlik/WopiHost –