当前位置:   article > 正文

PHP接入onlyoffice实现在线编查看和编辑_php onlyoffice

php onlyoffice

我使用的是laravel框架,使用模板映射,如果使用的别的框架请使用相对于的依赖

接入 OnlyOffice 的过程可能会因为具体的场景而有所不同,但通常的步骤是

注册 OnlyOffice 帐号: 如果你还没有 OnlyOffice 的帐号,你需要先注册一个。这个帐号将用于管理你的文档和配置 OnlyOffice 的功能。

安装 OnlyOffice 服务器: 你需要安装 OnlyOffice 服务器以便将其集成到你的应用程序中。OnlyOffice 提供了一些不同的产品,包括 OnlyOffice Docs Community Edition(开源免费版)和商业版。你可以根据自己的需求选择适合的版本进行安装。

配置 OnlyOffice 服务器: 安装完成后,你需要进行一些基本的配置,如设置访问权限、域名配置等。

集成 OnlyOffice 到你的应用程序: 这可能需要编写一些代码来将 OnlyOffice 编辑器嵌入到你的应用程序中。OnlyOffice 提供了一些 API 和 SDK,可以帮助你在你的应用程序中集成 OnlyOffice 功能。

Composer安装依赖 onlyoffice新版使用的jwt需要安装扩展

composer require firebase/php-jwt
  • 1

onlyoffice 部署

参考已有博客部署onlyoffice,获取onlyoffice令牌,传送门如下

https://blog.csdn.net/txyllyyj/article/details/127316360
  • 1

php操作OnlyOffice 编辑和查看

控制器方法,这里需要注意你传的payload要和前端传值相同不然token会验证不过

    public function edit(Request $request)
    {
        //文件路径
        $path = 'test.docx';
        //获取文件后缀
        $file_extension = pathinfo($path, PATHINFO_EXTENSION);
        $documentType = null;
        //根据不同的文件后缀设置对应打开文档的类别
        if ($file_extension == 'doc' || $file_extension == 'docx') $documentType = 'text';
        if ($file_extension == 'xls' || $file_extension == 'xlsx') $documentType = 'spreadsheet';
        if ($file_extension == 'ppt' || $file_extension == 'pptx') $documentType = 'presentation';

        $officeKey = 'onlyoffice的令牌';
        $url = $path;
        $lastCommaPosition = strrpos($path, "/"); // 获取最后一个逗号的位置
        $result = substr($path, $lastCommaPosition + 1); // 截取逗号后面的字符
        $payload['document'] = [
            "fileType" => $file_extension,
            "key" => $result,
            "title" => $file->filename,
            "url" => $url,
            "permissions" => ["edit" => true],
        ];
        $payload['documentType'] = $documentType;

        $urlParams = http_build_query($request->all());
        $callbackUrl = env('onlyoffice服务器地址') . '/onlyOffice/callbackUrl?' . $urlParams . '&arrKey=' . $arr_key;
        $payload['editorConfig'] = [
            "callbackUrl" => $callbackUrl,
            "lang" => 'zh-CN',
            "mode" => 'edit',
            "autosave" => false,
        ];
        $token = \Firebase\JWT\JWT::encode($payload, $officeKey, 'HS256');
        return view('office.edit', compact('token', 'file', 'callbackUrl', 'url', 'documentType','result','file_extension'));
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

下面是view文件,注意预览模式和编辑模式配置项是不相同,如果发现文件打不开看看OnlyOffice是否能访问到文件路径

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>在线编辑office</title>
</head>
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<body style="height: 100vh;width: 100vw; margin: 0;">
<div id="placeholder"></div>
<script type="text/javascript" src="{{env('这里是自己部署的onlyoffice域名或者ip地址')}}/web-apps/apps/api/documents/api.js"></script>

<script type="text/javascript">
    //判断用户是否编辑模式进入  编辑模式进入需要传入文件回调地址
    @if($editModel)
        window.docEditor = new DocsAPI.DocEditor("placeholder",
        {
            "document": {
                "fileType": '{{$fileType}}',
                "key": '{{$randKey}}',
                "title": '{{$title}}',
                "url": '{{$visibleUrl}}'
            },
            "documentType": '{{$documentType}}',
            "editorConfig": {
                "lang": "zh-CN",
                "callbackUrl": '{{$saveCallback}}', //文件回调地址
            },
            "height": "100%",
            "width": "100%"
        });
    //预览模式
    @else
        window.docEditor = new DocsAPI.DocEditor("placeholder",
        {
            "document": {
                "fileType": '{{$fileType}}',
                "key": '{{$randKey}}',
                "title": '{{$title}}',
                "url": '{{$visibleUrl}}'
            },
            "documentType": '{{$documentType}}',
            "editorConfig": {
                "mode": "view",
                "lang": "zh-CN"
            },
            "lang":"zh-CN",
            "height": "100%",
            "width": "100%"
        });
    @endif
</script>
</body>
</html>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

回调方法,OnlyOffice默认是修改后十五秒,或者保存才会调用回调接口

    public function saveOfficeDoc(Request $request)
    {
        try {
            if (($body_stream = file_get_contents("php://input")) === FALSE) {
                echo "Bad Request";
            }
            $data = json_decode($body_stream, TRUE);
            if (!empty($data)) {
                if ($data["status"] == 2) {
                    $downloadUri = $data["url"];
                    $extension = $data['filetype'];
                    if (($new_data = file_get_contents($downloadUri)) === FALSE) {
                        echo "Bad Response";
                    } else {
                        // 文件保存地址
                        $folder_name = "uploads/" . date("Ym/d", time());
                        if (!is_dir($folder_name)) {
                            mkdir($folder_name, 0777, true);
                        }
                        $filename = time() . '_' . rand(111111,777777) . '.' . $extension;
                        //保存后的文件地址
                        $origin = $folder_name . '/' . $filename;
                        file_put_contents($origin, $new_data, LOCK_EX);
                        //可以写保存后的逻辑,参数是get传参
                        
                    }
                }
            }
        } catch (\Exception $exception) {
            file_put_contents('onlyoffice_error.txt', $exception->getMessage());
        }
        //这个不管是否成功都需要返回这个json串不然onlyoffice会报错
        echo "{\"error\":0}";
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

之后打开对应的在线编辑

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/476259
推荐阅读
相关标签
  

闽ICP备14008679号