Связь хоста PHP WOPI и клиента WOPI

Я немного запутался в WOPI. Я хочу реализовать базовый пример только для тестирования. Я сделал базовый хост WOPI:

<?php
require 'vendor/autoload.php';
use Pux\Mux;
use Pux\Executor;

class FilesController {

    // route: /files/:name
    public function getFileInfoAction($name) {
        $path = "office/$name";
        if (file_exists($path)) {
            $handle = fopen($path, "r");
            $size = filesize($path);
            $contents = fread($handle, $size);
            $SHA256 = base64_encode(hash('sha256', $contents, true));
            $json = array(
                'BaseFileName' => $name,
                'OwnerId' => 'admin',
                'Size' => $size,
                'SHA256' => $SHA256,
                'Version' => '222888822'
            );
            echo json_encode($json);
        } else {
            echo json_encode(array());
        }
    }

    // route: /files/:name/contents
    public function getFileAction($name) {
        $path = "office/$name";
        if (file_exists($path)) {
            $handle = fopen($path, "r");
            $contents = fread($handle, filesize($path));
            header("Content-type: application/octet-stream");
            echo $contents;
        }
    }
}


$mux = new Mux;
$mux->get('/files/:name', ['FilesController','getFileInfoAction']);
$mux->get('/files/:name/contents', ['FilesController','getFileAction']);
$path = $_SERVER['PATH_INFO'];
$args = explode("&", $path);
$route = $mux->dispatch( $args[0] );
Executor::execute($route);

и базовый клиент WOPI:

<?php
$wopi_url= ''; // ??????
$access_token = 'xxx';
$access_token_ttl = 1000 * 60;
?>

<form id="office_form" name="office_form" target="office_frame" action='<?php $wopi_url; ?>' method="post">
    <input name="access_token" value='<?php $access_token; ?>' type="hidden" />
    <input name="access_token_ttl" value='<?php $access_token_ttl; ?>' type="hidden" />
</form>

<span id="frameholder"></span>

<script type="text/javascript">
    var frameholder = document.getElementById("frameholder");
    var office_frame = document.createElement("iframe");
    office_frame.name = "office_frame";
    office_frame.id ="office_frame";
    frameholder.appendChild(office_frame);
    document.getElementById("office_form").submit();
</script>

я не понимаю, какой $wopi_url мне нужно установить в клиент?

Я реализовал только в хосте:

  1. getFileAction: / files /: name (https://wopi.readthedocs.io/projects/wopirest/en/latest/files/GetFile.html?highlight=getfile)
  2. getFileInfoAction: / files /: имя / содержимое (https://wopi.readthedocs.io/projects/wopirest/en/latest/files/CheckFileInfo.html#checkfileinfo)

person ar099968    schedule 09.09.2019    source источник


Ответы (1)


Вам необходимо получить «XML обнаружения», а затем извлечь URL-адрес «редактирования» для «приложения», которое вы хотите использовать.

Этот URL-адрес будет иметь определенные параметры в качестве параметров запроса, которые вам придется либо удалить, либо сохранить в зависимости от функций, которые вы хотите использовать.

person c0d3rguy    schedule 11.09.2019