| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
基于 MinerU 的网页在线文档转换服务提取为api格式,支持 PDF、Word 文档、图片转换为 Markdown 格式。
首先需要配置认证token。项目提供了配置文件模板:
# 复制配置文件模板
cp config.example.json config.json
# 编辑配置文件,替换authToken
nano config.json # 或使用其他编辑器配置文件内容:
{
"mineru": {
"authToken": "Bearer your-auth-token-here",
"baseURL": "https://mineru.org.cn/api/v4",
"timeout": 30000,
"maxConcurrency": 6
}
}重要:
# 1. 克隆项目
git clone <repository-url>
cd mineru-api
# 2. 配置认证token
# 编辑 config.json 文件,替换其中的 authToken
# 3. 构建Docker镜像
docker build -t mineru-api .
# 4. 创建输出目录(可选)
mkdir -p output
# 5. 运行容器
docker run -d \
--name mineru-api \
-p 8000:8000 \
-v /root/mineru/config.json:/app/config.json \
-v /root/mineru/output:/app/output \
--restart unless-stopped \
mineru-api
# 6. 查看容器状态
docker ps
# 7. 查看日志
docker logs -f mineru-api
# 8. 停止容器
docker stop mineru-api
# 9. 删除容器
docker rm mineru-api项目提供了 docker-compose.yml 文件,可以更方便地管理容器:
# 1. 克隆项目
git clone <repository-url>
cd mineru-api
# 2. 配置认证token
# 编辑 config.json 文件,替换其中的 authToken
# 3. 修改 docker-compose.yml 中的挂载路径(可选)
# 默认挂载路径为 /root/mineru/,根据实际情况修改
# 4. 构建并启动服务
docker-compose up -d --build
# 5. 查看日志
docker-compose logs -f
# 6. 停止服务
docker-compose downdocker-compose.yml 配置说明:
version: '3.8'
services:
mineru-api:
container_name: mineru-api
build:
context: .
dockerfile: Dockerfile
image: mineru-api
ports:
- "8000:8000"
volumes:
- /root/mineru/config.json:/app/config.json # 配置文件挂载
- /root/mineru/output:/app/output # 输出目录挂载
restart: unless-stopped自定义配置:
根据实际部署环境,修改 volumes 中的挂载路径:
volumes:
- ./config.json:/app/config.json # 使用当前目录的配置文件
- ./output:/app/output # 使用当前目录的输出目录容器启动后,可以通过以下命令检查服务状态:
# 检查容器健康状态
docker inspect --format='{{.State.Health.Status}}' mineru-api
# 测试API接口
curl http://localhost:8000/health# 1. 安装依赖
npm install
# 2. 配置认证token
# 编辑 config.json 文件,替换其中的 authToken
# 3. 启动服务
npm start
# 4. 测试服务
curl http://localhost:8000/healthGET /health响应示例:
{
"success": true,
"message": "MinerU API Server is running",
"timestamp": "2024-01-01T12:00:00.000Z",
"version": "1.0.0",
"uptime": 3600
}GET /api/supported-types响应示例:
{
"success": true,
"message": "支持的文件类型信息",
"data": {
"extensions": [".pdf", ".doc", ".docx", ".jpg", ".png", "..."],
"description": "PDF文档(.pdf)、Word文档(.doc, .docx)、图片文件(.jpg, .jpeg, .png, .gif, .bmp, .tiff, .webp)",
"maxFileSizes": {
"PDF": "100MB",
"WORD": "50MB",
"IMAGE": "20MB"
}
}
}POST /api/convert请求参数:
转换选项:
{
"is_ocr": false, // 是否启用OCR(图片推荐true)
"enable_formula": true, // 是否识别数学公式
"enable_table": true, // 是否识别表格
"is_chem": false // 是否为化学文档
}响应示例:
{
"success": true,
"message": "文档转换成功",
"data": {
"filename": "document.pdf",
"fileType": "PDF",
"taskId": "task_123456",
"markdownUrl": "https://cdn.example.com/result.md",
"layoutUrl": "https://cdn.example.com/layout.json"
}
}# 转换 PDF 文档
curl -X POST http://localhost:8000/api/convert \
-F "file=@document.pdf" \
-F 'options={"enable_formula":true,"enable_table":true}'
# 转换图片(启用OCR)
curl -X POST http://localhost:8000/api/convert \
-F "file=@image.png" \
-F 'options={"is_ocr":true}'const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');
async function convertDocument(filePath) {
const formData = new FormData();
formData.append('file', fs.createReadStream(filePath));
formData.append('options', JSON.stringify({
is_ocr: false,
enable_formula: true,
enable_table: true
}));
try {
const response = await axios.post('http://localhost:8000/api/convert', formData, {
headers: formData.getHeaders(),
timeout: 1800000 // 30分钟
});
console.log('转换成功:', response.data);
return response.data;
} catch (error) {
console.error('转换失败:', error.response?.data || error.message);
throw error;
}
}import json
import requests
def convert_document(file_path, options=None):
url = 'http://localhost:8000/api/convert'
files = {'file': open(file_path, 'rb')}
data = {}
if options:
data['options'] = json.dumps(options)
try:
response = requests.post(url, files=files, data=data, timeout=1800)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f'转换失败: {e}')
raise
finally:
files['file'].close()
# 使用示例
result = convert_document('document.pdf', {
'enable_formula': True,
'enable_table': True
})
print(f'Markdown URL: {result["data"]["markdownUrl"]}')项目使用 config.json 文件进行配置,主要包含MinerU API相关设置:
{
"mineru": {
"authToken": "Bearer your-auth-token-here",
"baseURL": "https://mineru.org.cn/api/v4",
"timeout": 30000,
"maxConcurrency": 6
}
}配置项说明:
| 配置项 | 说明 | 默认值 |
|---|---|---|
| authToken | MinerU API认证token(必需) | 无 |
| baseURL | MinerU API基础URL | https://mineru.org.cn/api/v4 |
| timeout | API请求超时时间(毫秒) | 30000 |
| maxConcurrency | 最大并发上传数量 | 6 |
重要提示:
| 变量名 | 默认值 | 说明 |
|---|---|---|
| PORT | 8000 | 服务端口 |
| NODE_ENV | development | 运行环境 |
| RATE_LIMIT | 10 | 速率限制(每15分钟) |
| ALLOWED_ORIGINS | * | 允许的跨域来源 |
# 基础运行
docker run -d \
--name mineru-api \
-p 8000:8000 \
-v $(pwd)/config.json:/app/config.json \
mineru-api
# 生产环境配置
docker run -d \
--name mineru-api \
-p 8000:8000 \
-e NODE_ENV=production \
-e RATE_LIMIT=20 \
-e ALLOWED_ORIGINS=https://yourdomain.com \
-v $(pwd)/config.json:/app/config.json \
-v $(pwd)/output:/app/output \
--restart unless-stopped \
mineru-api# 运行测试脚本
npm test
# 或直接运行
node examples/test-api.js所有日志输出到控制台,包含时间戳、级别和消息信息。
查看日志:
# Docker容器日志
docker logs -f mineru-api
# 本地开发日志
npm start # 直接在终端查看本项目内置了中文文件名编码修复功能,可以自动处理以下编码问题:
UTF-8乱码修复
原始文件名: 鲁迅真的会带坏青少年吗?.pdf 乱码显示: é²è¿ççä¼å¸¦åéå°å¹´åï¼.pdf 自动修复: 鲁迅真的会带坏青少年吗?.pdf ✅
URL编码修复
URL编码: %E9%B2%81%E8%BF%85%E7%9C%9F%E7%9A%84.pdf 自动修复: 鲁迅真的.pdf ✅
编码占位符处理
问号占位符: ????.pdf 处理方式: 保持原样或尝试其他编码方式
文件上传失败
转换超时
Docker 容器无法启动
认证失败
MIT License
| Back | FazBrowse Home | New Git URL |