当前位置: 首页 > news >正文

koa2文件的上传下载功能

const Router = require(“koa-router”);
const upload = new Router();
const bodyParser = require(“koa-bodyparser”);
const multer = require("@koa/multer");
const path = require(“path”);
const article = require("…/utils/sql");
const { getCurrentTime } = require("…/utils/times");

upload.use(bodyParser());

const storage = multer.diskStorage({
destination: function (req, file, cb) {
const uploadPath = path.join(__dirname, “…/uploads”);
cb(null, uploadPath);
},
filename: function (req, file, cb) {
cb(null, file.originalname);
},
});

const uploadFile = multer({ storage: storage });

upload.post("/upload", uploadFile.single(“file”), async (ctx) => {
const created_at = getCurrentTime();
const { userId, name, type, size, folderId } = ctx.request.body;

const user_id = userId;
const filename = name;
const folder_id = folderId;

const filePath = path.join(
__dirname,
“…/uploads”,
ctx.request.file.filename
);
const relativeFilePath = path.relative(
path.join(__dirname, “…/uploads”),
filePath
);

let data = await article.addFile(
user_id,
filename,
size,
folder_id,
type,
created_at,
relativeFilePath
);

ctx.body = {
code: 200,
msg: “创建成功”,
data,
};
});

module.exports = upload;

下载功能
const Router = require(“koa-router”);
const download = new Router();
const bodyParser = require(“koa-bodyparser”);
download.use(bodyParser());
const article = require("…/utils/sql");
const path = require(“path”);
const send = require(“koa-send”); // 引入 koa-send
const static = require(“koa-static”); // 引入 koa-static

download.use(static(path.join(__dirname, “…/uploads”)));

download.post("/download", async (ctx) => {
let data = ctx.request.body;
const { id } = data;
let res = await article.downloadFile(id);

if (res.data && res.data.length > 0) {
const file = res.data[0];
const filePath = file.relativeFilePath; // 确保这是文件在服务器上的完整路径
console.log(filePath)
await send(ctx, filePath, { root: path.join(__dirname, “…/uploads/”) });
} else {
ctx.body = {
code: 404,
msg: “文件未找到”,
};
}
});

module.exports = download;

http://www.lryc.cn/news/280191.html

相关文章:

  • test-02-test case generate 测试用例生成 EvoSuite 介绍
  • 1.单表查询
  • FFmpeg 的使用与Docker安装流媒体服务器
  • Qt QListWidget列表框控件
  • 小知识分享2
  • 【Golang开源项目】Golang高性能内存缓存库BigCache设计与分析
  • Elasticsearch 7.8.0从入门到精通
  • 寻找最富裕的小家庭 - 华为OD统一考试
  • ssm基于Java的药店药品信息管理系统的设计与实现论文
  • Word插件-大珩助手-手写电子签名
  • Edge扩展插件安装位置
  • Git将本地项目上传到Gitee仓库
  • linux环境安装docker
  • 机器人技能学习-robosuite-0-入门介绍
  • 【工具】tmux简单用法
  • 使用 C++/WinRT 的错误处理
  • 计算机基础专升本笔记九-Windows7基础(一)Windows 7 介绍
  • LeetCode1109. Corporate Flight Bookings
  • 视觉SLAM十四讲|【五】相机与IMU时间戳同步
  • js null和undefined的区别
  • Arduino| IDE下载、安装和设置以及开发板的连接
  • Linux之Ubuntu环境Jenkins部署前端项目
  • QT下的几种实现modbus的库,记录
  • HarmonyOS4.0系统性深入开发18公共事件简介
  • 华为路由器OSPF动态链路路由协议配置
  • 常用注解/代码解释(仅个人使用)
  • 2024阿里云服务器ECS介绍_全方位解析_CPU性能详解
  • 向伟人学习反焦虑,在逆境中崛起
  • 线上问题整理
  • 【elastic search】详解elastic search集群