用onlyoffice现在实现了文档ppt、excel、word在线浏览和编辑,求助怎么设置可以直接保存 #3899
-
对接的是自己搭建在服务器上的onlyoffice服务,目前文件能浏览和编辑,但编辑后不能直接保存,有些苦恼。 |
Beta Was this translation helpful? Give feedback.
Replies: 5 comments 15 replies
-
编辑模式麻烦很多~在alist中,实现的意义不大,我情愿下载后编辑。不过后来发现有一个好处,就是能共同编辑。某些情况下,这个功能很好用! callback.php
edit.html
bandicam.2023-03-23.18-11-14-465.mp4 |
Beta Was this translation helpful? Give feedback.
-
@chenjuefei 大佬,请问能分享下url-to-callback.ashx文件吗,我用你上面那个callback.php提示无法保存,报下面这个错,感谢! |
Beta Was this translation helpful? Give feedback.
-
求教各位大佬:callback.php 文件应该放在哪个路径下 |
Beta Was this translation helpful? Give feedback.
-
你怎么做到实现了文档ppt、excel、word在线浏览和编辑的,能教一下吗,比如后端代码 |
Beta Was this translation helpful? Give feedback.
-
根据大佬提供的思路 <?php
function curl_post($url, $header, $data){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
function curl_put($url, $header, $data){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_ENCODING, '');
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_TIMEOUT, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
// 获取原始文件名
$input_file_url = $_GET['file_url'];
if (($body_stream = file_get_contents("php://input"))===FALSE){
echo "{\"error\":1}";
}
$data = json_decode($body_stream, TRUE);
if ($data["status"] == 2){
// 获取待传输文件,content保存在new_data
$downloadUri = $data["url"];
$stream_opts = [
"ssl" => [
"verify_peer"=>false,
"verify_peer_name"=>false,
]
];
if (($new_data = file_get_contents($downloadUri, false, stream_context_create($stream_opts)))===FALSE){
echo "{\"error\":2}";
} else {
// POST token 获取
$post_url = "http://alist/api/auth/login";
$post_header = [
"Content-type:application/json;charset='utf-8'",
"Accept:application/json"
];
$post_data = [
'Username' => 'username',
'Password' => 'password'
];
$post_data = json_encode($post_data);
$post_response = curl_post($post_url, $post_header, $post_data);
$post_response_data = json_decode($post_response, true);
$token = $post_response_data["data"]["token"];
// 执行put操作 直接上传文件
// 这里写的比较粗鄙
$put_url = "http://alist/api/fs/put";
$sublen = strlen("http://alist/p") - strlen($input_file_url);
$filename = urlencode(substr($input_file_url, $sublen));
$put_header = [
sprintf("Authorization:%s", $token),
sprintf("File-Path:%s", $filename),
"Content-Type:application/octet-stream"
];
$put_response = curl_put($put_url, $put_header, $new_data);
}
}
echo "{\"error\":0}";
?> 大概流程就是通过php的get获取原始url,根据原始url解析文件名,post获取token,put上传文档。 edit.html要相应改一下 "editorConfig": {
"lang": "zh-CN",
"mode" : "edit" ,
"callbackUrl": "http://phphost/callback.php?file_url="+url,
}, http://alist php我这边用的是nginx+php-fpm. |
Beta Was this translation helpful? Give feedback.
编辑模式麻烦很多~在alist中,实现的意义不大,我情愿下载后编辑。不过后来发现有一个好处,就是能共同编辑。某些情况下,这个功能很好用!
编辑模式除了需要edit.html外,还需要配置一个回调处理程序 详细可参阅https://api.onlyoffice.com/zh/editors/callback。我自己用到是PHP。
callback.php
edit.html