赞
踩
我使用的是laravel框架,使用模板映射,如果使用的别的框架请使用相对于的依赖
注册 OnlyOffice 帐号: 如果你还没有 OnlyOffice 的帐号,你需要先注册一个。这个帐号将用于管理你的文档和配置 OnlyOffice 的功能。
安装 OnlyOffice 服务器: 你需要安装 OnlyOffice 服务器以便将其集成到你的应用程序中。OnlyOffice 提供了一些不同的产品,包括 OnlyOffice Docs Community Edition(开源免费版)和商业版。你可以根据自己的需求选择适合的版本进行安装。
配置 OnlyOffice 服务器: 安装完成后,你需要进行一些基本的配置,如设置访问权限、域名配置等。
集成 OnlyOffice 到你的应用程序: 这可能需要编写一些代码来将 OnlyOffice 编辑器嵌入到你的应用程序中。OnlyOffice 提供了一些 API 和 SDK,可以帮助你在你的应用程序中集成 OnlyOffice 功能。
composer require firebase/php-jwt
参考已有博客部署onlyoffice,获取onlyoffice令牌,传送门如下
https://blog.csdn.net/txyllyyj/article/details/127316360
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'));
}
<!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>
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}";
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。