resume-parser-mcp
Version:
To install dependencies:
52 lines (51 loc) • 1.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.downloadFile = downloadFile;
const axios_1 = __importDefault(require("axios"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const os_1 = require("os");
const uuid_1 = require("uuid");
const logger_1 = require("../utils/logger");
async function downloadFile(url) {
const logger = (0, logger_1.useLogger)();
try {
const response = await (0, axios_1.default)({
url,
method: 'GET',
responseType: 'stream',
});
let fileExtension = path_1.default.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_1.default.join((0, os_1.tmpdir)(), `${(0, uuid_1.v4)()}${fileExtension}`);
const writer = fs_1.default.createWriteStream(tempFilePath);
await new Promise((resolve, reject) => {
response.data.pipe(writer);
let error = null;
writer.on('error', (err) => {
error = err;
writer.close();
reject(err);
});
writer.on('close', () => {
if (!error) {
resolve(tempFilePath);
}
});
});
return tempFilePath;
}
catch (error) {
logger.error('文件下载失败:', error?.message);
throw new Error(`无法下载文件: ${error?.message}`);
}
}