Skip to content

xsymphony/gouno

Repository files navigation

gouno

gouno封装了unoconv的操作,提供restful接口供转化文件,并且在unoconv基础上,额外提供了:

  • 基于Docker,快速安装并运行
  • 并行执行转化任务
  • 设置转化超时时间
  • 限制转化文件的大小
  • 可以缓存转化后的文件

项目结构

.
├── boot.sh              # Dockerfile入口脚本
├── build.sh             # 项目编译脚本
├── config.go            # 存储配置信息
├── Dockerfile
├── handler.go
├── middleware.go
├── main.go
├── README.md
├── supervisord.conf     # supervisor配置文件,管理unoconv及gouno服务
├── unoconv.go           # 主要工具
└── vendor               # govendor固化依赖
    │   └── ...
    └── vendor.json

部署

拉取代码

git clone https://www.github.com/xiongsyao/gouno.git && cd gouno

编译

当前项目采用golang:1.8镜像作为编译环境,编译脚本已经写好,为build.sh

chmod 777 build.sh
./build.sh

成功后将在当前目录下生成名为gouno的可执行文件。 首次执行build.sh命令时,会先拉取golang:1.8镜像,所需时间较长。

生成镜像

当前目录下执行:

docker build -t gouno .

运行服务

在跑运行命令之前,需要先了解以下几点:

  • 附件转化依赖于libreoffice,容器需要挂载宿主机的字体文件,否则转化的文件中包含中文时会乱码。
  • 内部服务的端口为3000

启动容器:

docker run -d -p 127.0.0.1:3000:3000 -e TIMEOUT=30 -e WORKER=5 -e MAXSIZE=-1 -v /usr/share/fonts:/usr/share/fonts/extra --name=gouno gouno

使用

假如我们想把一个docx的文件转化成pdf,通过使用curl,示例如下:

curl --form file=@example.docx --form "compress=1" http://127.0.0.1:3000/unoconv/pdf > example.pdf

其中,

  • compress为可选参数,当compress为1且转化后的文件包含媒体文件(例如图片)时,会压缩媒体文件。

  • /unoconv/{format-to-conver-to} 可以接受的转化规则如下:

    Input Output
    html pptx,docx,xlsx,pdf
    docx pdf,html
    xlsx docx,html,pdf

    docx类型的转化为html效果最佳,docx类型的,依情况转化为pdf、html效果较好。

    更多转化规则,自行摸索。

缓存转化的文件

只需要改变上列的请求url,即可缓存转化结果:

curl --form file=@example.docx http://127.0.0.1:3000/cached/unoconv/pdf > example.pdf

gouno内容通过sha256算法计算文件内容,得出唯一的id,当命中缓存时,不再调用unoconv,而是直接返回缓存的文件。

About

Dockerimage to run unoconv as a webservice using Go. 基于Unoconv、Go的文件转化服务

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published