因公司业务需要,需在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直接对文件进行预览。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐