node-format-converter
Version:
Universal file format conversion service for Node.js
309 lines (225 loc) • 7.8 kB
Markdown
一个使用 Node.js 构建的通用文件格式转换库,支持多种文件类型的转换,无需 Express 即可使用。
- **图片转换**:支持 jpg, png, webp, avif, tiff 等格式互转
- **视频转换**:支持 mp4, avi, mkv, mov 等格式转换
- **音频转换**:支持 mp3, wav, flac 等格式互转
- **文档转换**:支持 Word、PPT、PDF 互转
- **表格转换**:支持 Excel 和 CSV 互转
- **PDF 处理**:支持 PDF 转图片、提取文本
- **无依赖模式**:可以不依赖 Express,直接在任意 Node.js 项目中使用
- **Express 集成**:可选集成到 Express 应用中
```bash
npm install node-format-converter
```
- Node.js (v14+)
- 对于视频和音频转换:需要安装 FFmpeg
- 对于文档转换:需要安装 LibreOffice
最简单的使用方式,直接调用转换函数:
```javascript
const converter = require('node-format-converter');
// 初始化(可选)
converter.init();
// 直接转换文件 - 最简单的 API
async function convertFile() {
try {
const result = await converter.convert(
'/path/to/image.png', // 源文件路径
'jpg', // 目标格式
{ // 选项(可选)
quality: 90, // 图片质量
width: 800, // 输出宽度
type: 'image' // 可选,如不提供会自动判断
}
);
console.log(`转换成功! 输出文件路径: ${result.outputPath}`);
return result;
} catch (error) {
console.error('转换失败:', error);
}
}
```
你也可以直接使用特定的转换器模块:
```javascript
const { imageConverter, pdfConverter } = require('node-format-converter');
// 使用图片转换器
async function convertImage() {
try {
const result = await imageConverter.convertImage(
'/path/to/image.png', // 文件路径
'jpg', // 目标格式
{ // 选项(可选)
width: 800,
height: 600,
quality: 90
}
);
console.log(`图片转换成功! 输出文件路径: ${result.outputPath}`);
return result;
} catch (error) {
console.error('图片转换失败:', error);
}
}
```
如果你想在 Express 应用中使用,需要安装额外的依赖:
```bash
npm install express multer
```
然后可以轻松将转换服务集成到 Express 应用中:
```javascript
const express = require('express');
const converter = require('node-format-converter');
// 初始化应用
const app = express();
converter.init(); // 确保目录存在
// 使用转换路由中间件
app.use('/convert', converter.getExpressRouter({
maxFileSize: 100 * 1024 * 1024, // 100MB 限制
}));
// 启动服务器
app.listen(3000, () => {
console.log('转换服务已启动,访问: http://localhost:3000/convert');
});
```
最简单的转换 API,自动处理文件类型检测和转换。
```javascript
const result = await converter.convert('/path/to/file.jpg', 'png', {
quality: 90,
type: 'image' // 可选,如不提供会自动检测
});
```
初始化转换器,创建必要的目录。
```javascript
converter.init({
uploadsDir: '/custom/uploads/path', // 可选
convertedDir: '/custom/converted/path' // 可选
});
```
- **imageConverter**: 图片转换服务
- **videoConverter**: 视频转换服务
- **audioConverter**: 音频转换服务
- **docConverter**: 文档转换服务
- **excelConverter**: 表格转换服务
- **pdfConverter**: PDF处理服务
每个转换器模块都提供了相应的转换方法:
```javascript
const { outputPath } = await imageConverter.convertImage(file, targetFormat, options);
```
```javascript
const { outputPath } = await videoConverter.convertVideo(file, targetFormat, options);
```
```javascript
const { outputPath } = await audioConverter.convertAudio(file, targetFormat, options);
```
```javascript
const { outputPath } = await docConverter.convertDocument(file, targetFormat, options);
```
```javascript
const { outputPath } = await excelConverter.convertExcel(file, targetFormat, options);
```
```javascript
const { outputPath } = await pdfConverter.convertPdf(file, targetFormat, options);
```
- **file/filePath**: 文件路径字符串或文件对象
- **targetFormat**: 目标格式(如'jpg', 'mp4', 'pdf'等)
- **options**: 选项对象,根据不同的转换类型有不同的选项
```javascript
{
type: 'image', // 文件类型,可选(自动检测)
cleanupAfterConversion: true, // 转换后是否删除源文件
outputDir: '/custom/output' // 自定义输出目录
}
```
```javascript
{
width: 800, // 输出宽度
height: 600, // 输出高度
quality: 90, // 质量 (1-100)
fit: 'cover' // 调整大小方式: cover, contain, fill 等
}
```
```javascript
{
resolution: '1280x720', // 分辨率
videoBitrate: '2000k', // 视频比特率
audioBitrate: '128k', // 音频比特率
fps: 30 // 帧率
}
```
```javascript
{
audioBitrate: '192k', // 音频比特率
audioChannels: 2, // 音频通道数
sampleRate: 44100 // 采样率
}
```
```javascript
{
sheetName: 'Sheet1', // 工作表名称
delimiter: ',' // CSV分隔符
}
```
```javascript
{
density: 300, // DPI
quality: 100, // 图像质量
pages: [1, 2, 3] // 要转换的页码 (或 ["all"] 表示全部)
}
```
如果你安装了 Express 和 Multer,可以使用 `getExpressRouter()` 创建的路由:
**端点**:`POST /convert`
**请求格式**:`multipart/form-data`
**参数说明**:
| 参数名 | 类型 | 必填 | 说明 |
|-------|------|------|------|
| file | File | 是 | 要转换的文件 |
| type | String | 否 | 文件类型,如不提供,将根据文件后缀自动判断 |
| format | String | 是 | 目标格式,如 jpg, mp4, pdf 等 |
| options | String (JSON) | 否 | 转换参数,根据不同类型有不同选项 |
- 支持的格式:jpg/jpeg, png, webp, avif, tiff, bmp, gif, svg
- 支持的格式:mp4, avi, mkv, mov, wmv, flv, webm, 3gp
- 支持的格式:mp3, wav, flac, ogg, aac, m4a, wma
- 支持的格式:doc, docx, ppt, pptx, pdf, odt, rtf
- 支持的格式:xlsx, xls, csv
- 可转换为:jpg, png, txt (文本提取)
- 默认情况下,文件大小限制为 100MB(在 Express 路由中可配置)
- 转换完成后,原始文件会自动删除(可通过 `cleanupAfterConversion: false` 选项禁用)
- 使用自动类型检测功能时,如果无法识别文件类型,请明确指定 `type` 参数
MIT