单容器 Go + qpdf 实现的多 PDF 上传、排序、合并、下载。
在浏览器里把多个 PDF 按想要的顺序拼成一个 merged.pdf 再下载。
后端是 Go 标准库 HTTP 服务 + qpdf 做合并,前端是单个静态页面(拖拽排序),
所有上传文件按随机 Job ID隔离存放,合并完成后下载,过期任务自动清理。
网页操作(推荐):
http://服务器IP:8081。API 操作:
docker compose up -d --build
curl http://127.0.0.1:8080/health
打开 http://服务器IP:8080 使用。
| 变量 | 默认 |
|---|---|
| PDFWEB_BIND | 0.0.0.0:8080 |
| PDFWEB_DATA_DIR | /data |
| PDFWEB_QPDF | /usr/bin/qpdf |
| PDFWEB_MAX_FILE_SIZE_MB | 200 |
| PDFWEB_MAX_JOB_SIZE_MB | 500 |
| PDFWEB_MAX_FILES_PER_JOB | 50 |
| PDFWEB_JOB_TTL_MINUTES | 60 |
| PDFWEB_MAX_CONCURRENT_JOBS | 4 |
| PDFWEB_MERGE_TIMEOUT | 5m |
POST /api/v1/jobs 创建任务POST /api/v1/jobs/{id}/files 上传(multipart file,可多文件)GET /api/v1/jobs/{id} 查询DELETE /api/v1/jobs/{id}/files/{fid} 删除POST /api/v1/jobs/{id}/merge 合并 {"files":["f2","f1"]}GET /api/v1/jobs/{id}/download 下载 merged.pdfGET /healthclient_max_body_size 500m;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
随机 128bit Job ID、磁盘文件名服务端生成、校验 %PDF- 头、大小/数量/并发/超时限制、qpdf 参数数组传递无 shell、下载仅限本 Job 输出、过期自动清理。
Content type
Image
Digest
sha256:39671a7db…
Size
36.5 MB
Last updated
8 days ago
docker pull mooloco/pdf-web