koa中的图片上传

281 阅读2分钟

安装插件

    npm install koa-static

新建文件夹public 和public/uploads 在router文件夹下面创建 router/uploads.js

//  router/uploads.js
const path = require('path');
const Router = require('koa-router');  
const router = new Router({ prefix: "/uploads" });  //   /uploads请求接口地址

/**
 * @route GET api/uploads
 * @desc 测试接口地址
 * @access 接口是公开的
 */
router.post('/', ctx => {
  const file = ctx.request.files.file;
  const basename = path.basename(file.path);
  ctx.body = { url: `${ctx.origin}/uploads/${basename}` };
})


module.exports = router.routes();

在app.js里引入

//  app.js
const Koa=require("koa")
const Router=require("koa-router")
const userRouter=require("./router/user.js")  //路由
const uploadsRouter=require("./router/uploads")  //路由

const koaBody=require("koa-body")    //post请求获取值
const KoaStatic = require('koa-static')//上传图片,图片静态资源  ++
const path=require("path")  // ++

const app=new Koa()
const router=new Router()

const mongoose = require('mongoose');   //连接数据库
mongoose.connect('mongodb://localhost/admin');

const db = mongoose.connection;
db.on('error', console.error.bind(console, '连接失败'));
db.once('open', function() {
  console.log('连接成功');
});

// 静态资源访问功能
app.use(KoaStatic(path.join(__dirname, 'public')))  //++

app.use(koaBody({     //++
  multipart: true,   //++
  formidable: {     //++
    uploadDir: path.join(__dirname, '/public/uploads'),   //++
    keepExtensions: true   //++
  }    //++
}))   //++


router.get("/",ctx=>{
    ctx.body="Hello Koa"
})
app.use(koaBody())
app.use(userRouter)
app.use(uploadsRouter)
app.use(router.routes()).use(router.allowedMethods())

app.listen(3000,()=>{
    console.log("正在监听3000的端口");
})

注意点 一定要改成File!!! Text会上传不成功 image.png

然后我们就可以拿到上传图片的链接,打开就可以看到我们上传的图片

koa中方法的作用

    find() // 查看列表 
    // 用法
    // const getUserList = async (ctx) => {
    //  ctx.body = await Users.find();
    // };


    findById()//查看列表某个数据
    //用法
    // const getUser = async (ctx) => {
    // const user = await Users.findById(ctx.params.id);//ctx.params.id  一般是通过id来判断
    //  if (!user) {
    //    ctx.throw(404, "用户不存在");
    //  }
    //  ctx.body = user;
    // };
    
    
    //添加列表  findOne() 和 save()
    //用法
    // const createUser = async (ctx) => {
    //   let { name } = ctx.request.body;
    //   const user = await Users.findOne({ name });  //name  一般通过用户名来判断是否存在
    //   if (user) {
    //     ctx.throw(405, "已存在该用户!!!");
    //   } else {
    //     ctx.body = await new Users(ctx.request.body).save();
    //   }
    // };
    
    
    save()//只添加
    //用法
    // const createUser = async (ctx) => {
    //     ctx.body = await new Users(ctx.request.body).save();
    // };
    
    
    findByIdAndUpdate()//修改某个数据
    //用法
    // const updateUser = async (ctx) => {
    //   let { id } = ctx.params;
    //   const user = await Users.findByIdAndUpdate(id, ctx.request.body);  
    //   if (!user) {
    //     ctx.throw(404, "用户不存在");
    //   }
    //   ctx.status = 200;
    //   ctx.body = { msg: "修改成功" };
    // };
    
    
    findByIdAndDelete()//删除
    //用法
    // const deleteUser = async (ctx) => {
    //   let { id } = ctx.params;
    //   const user = await Users.findByIdAndDelete(id);//通过id判断
    //   if (!user) {
    //     ctx.throw(404, "用户不存在!!!");
    //   }
    //   ctx.status = 200;
    //   ctx.body = { msg: "删除成功" };
    // };
    
    
    findOne()//查找  一般在登录里面用
    //用法
    // const login = async (ctx) => {
    //   const user = await Users.findOne(ctx.request.body);//查找是否有
    //   if (!user) {
    //     ctx.throw(401, "用户名或密码错误");
    //   }
    //   ctx.body = { msg: "登录成功", token };
    // };