koa2 图片上传

首先必须允许文件上传

const KoaBody = require("koa-body");

// 使用文件上传中间件

app.use(KoaBody({ multipart: true }));

然后是要然外部能访问图片

const serve = require("koa-static");

const path = require("path");

app.use(serve(path.join(__dirname, "/public")));

焯,直接看官方的吧

const Koa = require('koa');
const Router = require('@koa/router');
const multer = require('@koa/multer');

const app = new Koa();
const router = new Router();
const upload = multer(); // note you can pass `multer` options here

// 添加多个文件上传的路由
router.post(
  '/upload-multiple-files',
  upload.fields([
    {
      name: 'avatar',
      maxCount: 1
    },
    {
      name: 'boop',
      maxCount: 2
    }
  ]),
  ctx => {
    console.log('ctx.request.files', ctx.request.files);
    console.log('ctx.files', ctx.files);
    console.log('ctx.request.body', ctx.request.body);
    ctx.body = 'done';
  }
);

// 添加单个文件上传的路由
router.post(
  '/upload-single-file',
  upload.single('avatar'),
  ctx => {
    console.log('ctx.request.file', ctx.request.file);
    console.log('ctx.file', ctx.file);
    console.log('ctx.request.body', ctx.request.body);
    ctx.body = 'done';
  }
);

// 将路由器添加到我们的应用程序中
app.use(router.routes());
app.use(router.allowedMethods());

// 启动服务器
app.listen(3000);

重要的注意点就是,请求的key值要跟 upload.fields 中的 name 一样,如上我upload.fields中的是 avatar 所以我在请求的时候发送请求的 key 也要写成 avatar ,如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWWVsbG93V2VuSmll,size_19,color_FFFFFF,t_70,g_se,x_16

拿到数据储存到文件

const Router = require("@koa/router");
const multer = require("@koa/multer");

const router = new Router();

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "public/uploads/"); // 储存路径
  },
  filename: function (req, file, cb) {
    var fileFormat = file.originalname.split("."); // 获取文件后缀
    cb(null, Date.now() + "." + fileFormat[fileFormat.length - 1]); // 生成文件
  }
});
const upload = multer({ storage: storage }); // note you can pass `multer` options here

router.post("/upload-single-file", upload.single("avatar"), ctx => {
  console.log("ctx.request.file", ctx.request.file);
  console.log("ctx.file", ctx.file);
  console.log("ctx.request.body", ctx.request.body);
  ctx.body = "done";
});

module.exports = router;

示例:

index.js

const Koa = require("koa");
const app = new Koa();
const user = require("./users");
app.use(user.routes(), user.allowedMethods());
app.listen(3005);

upload.js

const multer = require("@koa/multer");

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "public/uploads/"); // 储存路径
  },
  filename: function (req, file, cb) {
    var fileFormat = file.originalname.split("."); // 获取文件后缀
    cb(null, Date.now() + "." + fileFormat[fileFormat.length - 1]); // 生成文件
  }
});
const upload = multer({ storage: storage }); // note you can pass `multer` options here
module.exports = upload;

users.js

const Router = require("@koa/router");
const upload = require("../model/upload");
const router = new Router();

router.post("/upload", upload.single("avatar"), ctx => {
  console.log("ctx.request.file", ctx.request.file);
  console.log("ctx.file", ctx.file.path);
  console.log("ctx.request.body", ctx.request.body);
  ctx.body = "done";
});

module.exports = router;

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将图片上传到数据库,你需要执行以下步骤: 1. 配置数据库连接:首先,确保你已经安装并配置了适当的数据库驱动程序(如MySQL、MongoDB等)。在Koa应用程序的配置文件中,添加数据库连接的相关信息,包括主机名、端口号、用户名、密码等。 2. 创建数据库模型:使用ORM(对象关系映射)工具(如Sequelize、Mongoose等),创建与数据库表或集合对应的模型。在模型中定义存储图片的字段,如文件名、文件类型、文件路径等。 3. 设置路由和控制器:在Koa应用程序中设置一个用于接收上传图片的路由,并编写相应的控制器逻辑。在控制器中,使用适当的中间件(如koa-body、multer等)来处理文件上传,并将上传的图片保存到指定的目录。 4. 将图片信息存储到数据库:在控制器中,将上传的图片信息存储到数据库中。使用之前创建的数据库模型,在控制器中创建一个新的实例,并将上传的图片信息赋值给对应字段。然后调用保存(save)或创建(create)方法将图片信息持久化到数据库。 以下是一个简单的示例代码: ```javascript // 引入依赖 const Koa = require('koa'); const Router = require('koa-router'); const multer = require('@koa/multer'); const { createReadStream } = require('fs'); const { promisify } = require('util'); const pipeline = promisify(require('stream').pipeline); const { Image } = require('./models'); // 假设已经定义了Image模型 // 创建Koa应用程序和路由 const app = new Koa(); const router = new Router(); // 配置文件上传 const upload = multer({ dest: 'uploads/' }); // 设置图片上传路由和控制器 router.post('/upload', upload.single('image'), async (ctx) => { const { file } = ctx.req; // 将上传的图片保存到指定目录 await pipeline(createReadStream(file.path), createWriteStream(`uploads/${file.originalname}`)); // 将图片信息存储到数据库 await Image.create({ filename: file.originalname, filetype: file.mimetype, filepath: `uploads/${file.originalname}`, }); ctx.body = 'Image uploaded successfully!'; }); // 将路由挂载到应用程序 app.use(router.routes()).use(router.allowedMethods()); // 启动应用程序 app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 上述示例代码演示了如何使用Koa、Multer和Sequelize将图片上传到数据库。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值