From 59fe024dcac2eb5b4be8f63922cf26406d882b57 Mon Sep 17 00:00:00 2001 From: sunshine <1284744696@qq.com> Date: Tue, 21 May 2024 11:16:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B5=84=E6=BA=90=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 42 ++++++-- config/log.js | 50 ++++----- modules/auto/AutoUpdateSdkMain.js | 207 +++++++++++++++++++++++++++++++++++++ modules/auto/MaterialAutoUpdate.js | 16 ++- package-lock.json | 124 +++++++++++++++++++++- package.json | 1 + utils/DownloadFile.js | 21 ++++ 7 files changed, 418 insertions(+), 43 deletions(-) create mode 100644 modules/auto/AutoUpdateSdkMain.js create mode 100644 utils/DownloadFile.js diff --git a/app.js b/app.js index 986d270..74343c8 100644 --- a/app.js +++ b/app.js @@ -2,6 +2,8 @@ const Koa = require('koa'); const app = new Koa(); require('console-color-mr'); //颜色模块 const koaBody = require('koa-body'); //处理post请求参数 +const fs = require('fs'); + app.use(koaBody({ multipart: true, // 支持文件上传 })); @@ -17,21 +19,39 @@ app.use(json()); // 捕获错误logger 记录 const logsUtil = require('./utils/LogUtil'); +// 错误处理中间件(注意:这不会捕获由 Koa 抛出的 'error' 事件) +app.use(async (ctx, next) => { + try { + await next(); + // 如果 Koa 没有找到任何路由来处理请求,它将自动设置 ctx.status 为 404 + if (ctx.status === 404) { + ctx.status = 404; + ctx.body = { + error: 'Not Found', + code: 404, + message: 'The requested resource could not be found.' + }; + } + } catch (err) { + // 这里捕获在路由处理函数中抛出的错误 + logsUtil.logError(ctx, err); + ctx.status = 500; + ctx.body = { + error: 'Internal Server Error', + code: 500, + message: 'An unexpected error occurred on the server.' + }; + } +}); + +// 捕获未被处理的错误(如异步错误或中间件外的错误) app.on('error', (err, ctx) => { logsUtil.logError(ctx, err); + // 注意:此时响应可能已经被发送到客户端,所以你不能修改 ctx.body 或 ctx.status + // 你可以在这里做其他清理工作,比如关闭数据库连接等 }); -// 捕获全局请求不存在的接口返回404 -app.use(async (ctx, next) => { - await next(); - if (parseInt(ctx.status) === 404) { - ctx.response.status = 404; - ctx.body = '404' - } else if (parseInt(ctx.status) === 500) { - ctx.response.status = 500; - ctx.body = "500" - } -}) + // 启动服务器 const port = 3000; diff --git a/config/log.js b/config/log.js index 33418ad..a3d256a 100644 --- a/config/log.js +++ b/config/log.js @@ -46,36 +46,36 @@ let errorLogPath = baselogPath + errorPath + '/' + errorFileName; "path": errorPath, compress:true }, - "resLogger": { - "type": "dateFile", - "filename": responseLogPath, - "pattern": "yyyy-MM-dd.log", - "alwaysIncludePattern": true, - "encoding": "utf-8", - "maxLogSize": 52428800, - "numBackups": 3, - "path": responsePath, - compress:true - }, - "handleLogger": { - "type": "dateFile", - "filename": handleLogPath, - "pattern": "yyyy-MM-dd.log", - "alwaysIncludePattern": true, - "encoding": "utf-8", - "maxLogSize": 52428800, - "numBackups": 3, - "path": responsePath, - compress:true - }, + // "resLogger": { + // "type": "dateFile", + // "filename": responseLogPath, + // "pattern": "yyyy-MM-dd.log", + // "alwaysIncludePattern": true, + // "encoding": "utf-8", + // "maxLogSize": 52428800, + // "numBackups": 3, + // "path": responsePath, + // compress:true + // }, + // "handleLogger": { + // "type": "dateFile", + // "filename": handleLogPath, + // "pattern": "yyyy-MM-dd.log", + // "alwaysIncludePattern": true, + // "encoding": "utf-8", + // "maxLogSize": 52428800, + // "numBackups": 3, + // "path": responsePath, + // compress:true + // }, }, //供外部调用的名称和对应设置定义 categories: { "default": {"appenders": ["rule-console"], "level": "all"}, - "resLogger": {"appenders": ["resLogger"], "level": "info"}, + // "resLogger": {"appenders": ["resLogger"], "level": "info"}, "errorLogger": {"appenders": ["errorLogger"], "level": "error"}, - "handleLogger": {"appenders": ["handleLogger"], "level": "all"}, - "http": {"appenders": ["resLogger"], "level": "info"} + // "handleLogger": {"appenders": ["handleLogger"], "level": "all"}, + // "http": {"appenders": ["resLogger"], "level": "info"} }, "baseLogPath": baselogPath } \ No newline at end of file diff --git a/modules/auto/AutoUpdateSdkMain.js b/modules/auto/AutoUpdateSdkMain.js new file mode 100644 index 0000000..06100fb --- /dev/null +++ b/modules/auto/AutoUpdateSdkMain.js @@ -0,0 +1,207 @@ + +const ut = require("../sdk/ts/sdk-unittest-node.js"); +const comd = require("../sdk/ts/common-data-node.js"); +const fs = require("fs"); +const path = require("path"); +// 读取json文件 +function readJsonFile(pathStr) { + let detail = fs.readFileSync(pathStr, "utf8"); + detail = JSON.parse(detail); + return detail; +} + +/** 读取物料详情 */ +function readMatDetail(reqR, id, inParam) { + const relatDetail = readJsonFile(path.join(reqR.detailDir, id + ".json")); + inParam.setMatDetail(id, relatDetail); +} + +/** 读取素材详情 */ +function readDetail(reqR, id, inParam) { + const relatDetail = readJsonFile(path.join(reqR.detailDir, id + ".json")); + inParam.setDetail(id, relatDetail); + + if (!inParam.hasBin(relatDetail.materialType)) { + inParam.makeContent(relatDetail); + return; + } + const relatPth = path.join(reqR.binDir, id + ".bin"); + const relatBin = fs.readFileSync(relatPth); + const r = inParam.setBin(relatBin, relatDetail); + for (const mid of r) { + readDetail(reqR, mid, inParam); + } +} + + +function saveFile(doa, reqR) { + // 修改详情信息 + const newDetail = doa.detail; + newDetail.binFileUrl = reqR.newReceiveMaterialId + ".bin"; + newDetail.materialId = reqR.newReceiveMaterialId; + + const newDetailStr = JSON.stringify(newDetail, "", "\t"); + + const newReceiveFullPath = path.join(reqR.detailDir, reqR.newReceiveMaterialId + ".json"); + fs.writeFileSync(newReceiveFullPath, newDetailStr); + + // 新生成的bin + const newReceiveBinFullPath = path.join(reqR.binDir, reqR.newReceiveMaterialId + ".bin"); + fs.writeFileSync(newReceiveBinFullPath, doa.bin); +} + +function readAttr(dir, inParam, isAttr) { + const attrD = readJsonFile(dir); + for (const iterator of attrD) { + inParam.tvoM.createFTVByData(iterator, isAttr); + } +} + +function readExtends(reqR, inParam) { + const attrD = readJsonFile(reqR.extendDir); + inParam.extendsRuleM.initAttrMap(attrD); +} + +function readParam(reqR, inParam) { + const fns = fs.readdirSync(reqR.paramDir); + fns.forEach(fileName => { + const filedir = path.join(reqR.paramDir, fileName); + const stats = fs.statSync(filedir); + if (stats.isFile()) { + const fn = path.parse(filedir).name; + const paramDetail = readJsonFile(filedir); + inParam.setParamDetail(fn, paramDetail); + } + }); +} + +/** 初始化参数 */ +function initParam(reqR) { + const inParam = new ut.model_unittest.DSdkInArgv(); + inParam.reveiveId = reqR.receiveMaterialId; + inParam.req = reqR; + + readParam(reqR, inParam); + readDetail(reqR, inParam.reveiveId, inParam); + readAttr(reqR.attrDir, inParam, true); + readAttr(reqR.categoryDir, inParam, false); + readExtends(reqR, inParam); + return inParam; +} + +// 推送素材 +function pushMaterial(reqR) { + const inParam = initParam(reqR); + inParam.pushId = reqR.pushMaterialId; + inParam.pushIds = reqR.pushMaterialIdList; + for (const pid of inParam.pushIds) { + readDetail(reqR, pid, inParam); + } + if (reqR.materialRelationParamVOList != null) { + for (const rpvo of reqR.materialRelationParamVOList) { + if (inParam.checkIsMat(rpvo.paramType)) { + readMatDetail(reqR, rpvo.paramDefaultValue, inParam); + } + else if (inParam.checkIsStyle(rpvo.paramType)) { + readDetail(reqR, rpvo.paramDefaultValue, inParam); + } + } + } + if (reqR.relationMaterialIdList != null) { + for (let index = 0; index < reqR.relationMaterialIdList.length; index++) { + const element = reqR.relationMaterialIdList[index]; + readDetail(reqR, element, inParam) + } + } + const etd = new ut.model_unittest.UpdateAuto(inParam.decoder); + let doa = etd.startPushMaterial(inParam); + if (doa == null) { + doa = createDefDoa(inParam); + } + saveFile(doa, reqR); +} + +function createDefDoa(inParam) { + const bin = inParam.getBin(inParam.reveiveId); + const detail = inParam.getDetail(inParam.reveiveId); + + return { detail, bin } +} + +function handleDir(reqR, workDir) { + if (workDir != null) { + reqR.binDir = workDir + reqR.binDir; + reqR.detailDir = workDir + reqR.detailDir; + reqR.paramDir = workDir + reqR.paramDir; + reqR.reqFileUrl = workDir + reqR.reqFileUrl; + reqR.resFileUrl = workDir + reqR.resFileUrl; + reqR.attrDir = workDir + reqR.attrDir; + reqR.categoryDir = workDir + reqR.categoryDir; + reqR.extendDir = workDir + reqR.extendDir; + } +} + +function doPush(reqR, workDir = "") { + console.time("doPush") + comd.model_d.UClassTree.rootModule = comd.model_d.UClassTree.getNodeJsRootModule(module); + // setTimeout(()=>{ + handleDir(reqR, workDir); + if (reqR.materialRelationParamVOList != null) { + for (const o of reqR.materialRelationParamVOList) { + o.paramDefaultValue = o.paramDefaultValueVersion; + } + } + pushMaterial(reqR); + console.timeEnd("doPush") + // },1000) +} + +function tryReadReq(reqR, workDir = "") { + let isSuccess = true; + let code = 200; + let msg = "来自node的回复"; + try { + doPush(reqR, workDir); + } catch (error) { + isSuccess = false; + msg = error; + code = -1 + } + writeRes(reqR.resFileUrl, code, msg, isSuccess); +} + +function writeRes(pathStr, code, msg, isSuccess) { + const resD = { + "code": code, + "data": {}, + "msg": msg.stack, + "success": isSuccess + } + const resDStr = JSON.stringify(resD, "", "\t") + fs.writeFileSync(pathStr, resDStr) +} + +function readArgv(reqPath) { + // const reqPath = process.argv[2]; + const reqR = readJsonFile(reqPath); + tryReadReq(reqR); +} + +function localRun(reqPath) { + // 项目工程地址 + console.log('当前文件根目录:', __dirname) + console.log('当前文件根目录:', path.join(`${__dirname}/data/material_auto/upload/20240513143213139802/req/0297505113_62.json`)) + const p = path.join(`${__dirname}/data/material_auto/upload/20240513143213139802/req/0297505113_62.json`); // + // const reqR = readJsonFile(resolve('./sdk/data/material_auto/upload/20240513143213139802/req/0297505113_62.json')); + const reqR = readJsonFile(p); + // tryReadReq(reqR, __dirname); + doPush(reqR, __dirname); +} + +// readArgv() +// localRun() + +const autoUpdate = module.exports = { + localRun: localRun, + readArgvs: readArgv +}; \ No newline at end of file diff --git a/modules/auto/MaterialAutoUpdate.js b/modules/auto/MaterialAutoUpdate.js index 6604fe9..dcfa127 100644 --- a/modules/auto/MaterialAutoUpdate.js +++ b/modules/auto/MaterialAutoUpdate.js @@ -1,12 +1,18 @@ -const autoUpdate = require ("../sdk/ts/autoUpdateMain"); +const autoUpdate = require ("./AutoUpdateSdkMain"); +const path = require("path"); +const fs = require("fs"); +const axios = require('axios'); +const downloadFile = require("../../utils/DownloadFile"); //推送素材更新方法 const pushMaterial = async (ctx, next) => { - console.log('ctx', ctx.query); - console.log(ctx.query.req); - //线上执行更新 - autoUpdate.readArgv(ctx.query.req); + const buffer = await downloadFile.downloadFileToBuffer("https://7z-data.oss-cn-shenzhen.aliyuncs.com/render/custom/09/82/6052742231/h6j0lixqyk9niq8.bin"); + console.log("buffer", buffer); + fs.writeFileSync('./yyyyyyyy.bin', buffer); + const req = ctx.query.req; + console.log('req', req); + autoUpdate.readArgvs(req); }; const materialAutoUpdate = module.exports = { diff --git a/package-lock.json b/package-lock.json index f573ebe..e1c3da8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,15 @@ { - "name": "oa", + "name": "design_node_koa", "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "oa", + "name": "design_node_koa", "version": "1.0.0", "license": "ISC", "dependencies": { + "axios": "^1.7.0", "koa": "^2.13.0", "koa-body": "^4.2.0", "koa-helmet": "^6.0.0", @@ -139,6 +140,21 @@ "node": ">= 8" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.0.tgz", + "integrity": "sha512-IiB0wQeKyPRdsFVhBgIo31FbzOyf2M6wYl7/NVutFwFBRMiAbjNiydJIHKeLmPugF4kJLfA1uWZ82Is2QzqqFA==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -379,6 +395,17 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -512,6 +539,14 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -601,6 +636,38 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/formidable": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", @@ -1462,6 +1529,11 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -2108,6 +2180,21 @@ "picomatch": "^2.0.4" } }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.0.tgz", + "integrity": "sha512-IiB0wQeKyPRdsFVhBgIo31FbzOyf2M6wYl7/NVutFwFBRMiAbjNiydJIHKeLmPugF4kJLfA1uWZ82Is2QzqqFA==", + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2289,6 +2376,14 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2393,6 +2488,11 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -2467,6 +2567,21 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, + "follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "formidable": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", @@ -3120,6 +3235,11 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", diff --git a/package.json b/package.json index 8c20d63..3b0fefb 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "author": "", "license": "ISC", "dependencies": { + "axios": "^1.7.0", "koa": "^2.13.0", "koa-body": "^4.2.0", "koa-helmet": "^6.0.0", diff --git a/utils/DownloadFile.js b/utils/DownloadFile.js new file mode 100644 index 0000000..cf9ef21 --- /dev/null +++ b/utils/DownloadFile.js @@ -0,0 +1,21 @@ +const axios = require('axios'); + +//下载资源文件流 +async function downloadFileToBuffer(url) { + try { + // 发起 GET 请求并设置 responseType 为 'arraybuffer' + const response = await axios({ + method: 'get', + url, + responseType: 'arraybuffer' + }); + console.log("数据流", response.data); + return response.data; + } catch (error) { + throw new Error(`Error downloading file from ${url}: ${error.message}`); + } +} + +module.exports = { + downloadFileToBuffer: downloadFileToBuffer +}