因公司业务需要,需在Flask开发的后台里提供对文档的预览等功能,在自己的系统里嵌入onlyoffice。
首先部署onlyoffice的服务器为CentOS,首先安装docker,这步就省略了。
安装好docker后,键入命令
docker run -i -t -d -p 8090:80 -v /root/onlyoffice/DocumentServer/logs:/var/log/onlyoffice -v /root/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver
这时候输入服务器ip:8090出现下面页面则部署成功
接下来在OnlyOffice Python安装必备组件,使用编辑器运行网站。里面的server配置也不用多说,在官方文档里都有。
将该项目运行起来后,输入该服务器ip进入到以下页面:
这个时候基本的onlyoffice服务已经配置成功,点击upload File后就可以上传文件并进行预览。我的版本出现了一个报错‘the document couldnt be saved’,经过多方查找发现丢失了一些js包,如丢失sdk-all.js。于是docker exec -it ecstatic_mestorf bash
进入到onlyoffice容器里去查找,进入容器后到达路径/var/www/onlyoffice/documentserver/web-apps/apps/api/documents
打开cache-script.html并把下图两行代码注释掉
这时候再回到ip:8090地址,对文件进行预览后就可以了。
这个时候,onlyoffice功能已可以使用,可是还没有接入到我们自己的系统里面。看了下Python Example代码和其上传流程,本想通过ftp把文件上传到app_data里面,可是后来发现,直接通过文件上传不会生成一个“文件-hist”的文件,所以我们还是得通过Exmaple里面的 upload方法来对文件进行上传,然后返回预览的地址连接才行。
于是在自己系统中,则需要将该服务器的文件,通过部署在Python Example的upload上传文件的接口来进行传输:
def prview(*args):
data = request.get_json()
ret = statu_code.SUCCESS
try:
id_list = []
for i in data:
id_list.append(i['id'])
file_list = db.session.query(f).filter(f.id.in_(id_list)).all()
for i in file_list:
dir = basedir + '/ttt/' + i.file_name
url = 'http://EXAMPLE IP/upload'
files = {
'uploadedFile': (i.file_name, open(dir, 'rb'))
}
req = requests.post(url=url, files=files)
preview_url = 'http://EXAMPLE IP/edit?filename=%s'//在这里,我们先把EXAMPLE 预览地址写死,因为所有的预览地址都是该格式
preview_url = preview_url.replace('%s', i.file_name)
ret.update({'preview_url': preview_url})
return jsonify(ret)
except Exception as e:
return jsonify(statu_code.FAILED)
在Python Example中,因为upload的时候会用上传者ip来创建一个文件夹,然后才把上传的文件放入该ip来命名的文件夹中,这对我们来说不需要,所以就将所有上传者ip写死,我就写成python example的服务器地址了,也就是在/src/utils文件夹下的 docManager.py文件里所有curAdr地址全部写成自己写死的ip。最后再改写一下action.py里upload对文件的接收方法,也就是把fileInfo = request.FILES['uploadedFile']
变成fileInfo = request.FILES.get('uploadedFile')
即可。
此时通过自己的系统,点击预览时,自己的系统会将该文件通过example服务器的upload方法,通过onlyoffice直接对文件进行预览。