resume-parser-mcp
Version:
To install dependencies:
49 lines (44 loc) • 1.4 kB
text/typescript
import axios from 'axios';
import fs from 'fs';
import path from 'path';
import { tmpdir } from 'os';
import { v4 as uuidv4 } from 'uuid';
import { useLogger } from '../utils/logger';
export async function downloadFile(url: string) {
const logger = useLogger();
try {
const response = await axios({
url,
method: 'GET',
responseType: 'stream',
});
let fileExtension = path.extname(new URL(url).pathname).toLowerCase();
if (!fileExtension) {
const contentType = response.headers['content-type'];
if (contentType) {
fileExtension = `.${contentType.toLowerCase().split('/')[1]}`;
}
}
logger.info('fileExtension', fileExtension);
const tempFilePath = path.join(tmpdir(), `${uuidv4()}${fileExtension}`);
const writer = fs.createWriteStream(tempFilePath);
await new Promise((resolve, reject) => {
response.data.pipe(writer);
let error: Error | null = null;
writer.on('error', (err) => {
error = err;
writer.close();
reject(err);
});
writer.on('close', () => {
if (!error) {
resolve(tempFilePath);
}
});
});
return tempFilePath;
} catch (error: any) {
logger.error('文件下载失败:', error?.message);
throw new Error(`无法下载文件: ${error?.message}`);
}
}