element-ui 和 koa2实现文件上传,并且携带token认证。

89 篇文章 7 订阅
12 篇文章 0 订阅

1、koa2后台代码:

/**
 * 上传api接口
 */
const Router = require("koa-router");

const router = new Router({
  prefix: "/api/v1/upload" // 路由添加前缀
});

const multer = require("koa-multer");
const path = require("path");

const { Auth } = require("../../../middlewares/auth");

const AUTH_ADMIN = 16;

// 配置
let storage = multer.diskStorage({
  // 文件保存路径, 这里需要自己手动到public下面新建upload文件夹。
  destination: function(req, file, cb) {
    cb(null, "public/upload");
  },
  // 修改文件名称
  filename: function(req, file, cb) {
    let fileFormat = file.originalname.split("."); //以点分割成数组,数组的最后一项就是后缀名
    cb(null, Date.now() + "." + fileFormat[fileFormat.length - 1]);
  }
});
// 加载配置
let upload = multer({
  storage: storage,
  limits: {
    fileSize: (1024 * 1024) / 2 // 限制512KB
  }
});

// 上传文件
router.post("/add", new Auth(AUTH_ADMIN).m, upload.single('file'), async ctx => {
// 返回结果给前端
  ctx.response.status = 200;
  let data = {
    filename: ctx.req.file.filename
  }
  ctx.body = data
});

module.exports = router;

我这里上传需要传递token进行身份认证。如果不需要,将new Auth(AUTH_ADMIN).m,去掉。

2、前端Element-ui使用upload代码:

<template>
  <div class="wrap">
    测试上传
    <div>token:</div>
    <el-input type="text" v-model="token" />
    <el-upload
      class="upload-demo"
      action="http://localhost:3000/api/v1/upload/add"
      :on-preview="handlePreview"
      :on-remove="handleRemove"
      :before-remove="beforeRemove"
      multiple
      name="file"
      :headers="headers"
      :limit="3"
      :on-exceed="handleExceed"
      :file-list="fileList"
    >
      <el-button size="small" type="primary">点击上传</el-button>
      <div slot="tip" class="el-upload__tip">
        只能上传jpg/png文件,且不超过500kb
      </div>
    </el-upload>
  </div>
</template>

<script>
export default {
  data() {
    return {
      token: "",
      fileList: [],
    };
  },
  computed: {
    headers() {
      return {
        'Authorization': "Bearer "+ this.token
      }
    },
  },
  methods: {
    handleRemove(file, fileList) {
      console.log(file, fileList);
    },
    handlePreview(file) {
      console.log(file);
    },
    handleExceed(files, fileList) {
      this.$message.warning(
        `当前限制选择 3 个文件,本次选择了 ${
          files.length
        } 个文件,共选择了 ${files.length + fileList.length} 个文件`
      );
    },
    beforeRemove(file, fileList) {
      return this.$confirm(`确定移除 ${file.name}?`);
    }
  }
};
</script>

<style lang="scss" scoped>
.wrap {
  width: 1200px;
  margin: 0 auto;
}
</style>

我这里使用了Bearer token的认证方式。这个和koa2服务端token验证机制有关。
token相关设置,在heaers内设置。

name="file" 这个file名称是和后台约定的。

注意:element-ui的上传组件upload,它是一个文件调用一次请求接口的。

附上koa上传七牛云的文章

https://www.jianshu.com/p/7520e0bee777

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 Koa 框架时,设置静态目录和使用 koa2-swagger-ui 可能会产生冲突,因为它们都涉及到路由的处理。 当你使用 Koa 的 `koa-static` 中间件设置静态目录时,该中间件会将请求路径匹配到指定的静态文件,并返回给客户端。这意味着如果你的静态目录的路径与 Swagger UI 的路由路径相同,会导致冲突。 为了避免冲突,您可以考虑以下两种解决方案之一: 1. 将 Swagger UI 的路由路径设置为不与静态目录冲突的路径。例如,将 Swagger UI 的路由路径设置为 `/api-docs` 或其他不与现有静态目录路径冲突的路径。 2. 在 Koa 的路由处理中间件之前使用 `koa2-swagger-ui` 中间件。这样可以确保 Swagger UI 的路由优先于其他路由处理中间件执行,避免冲突。 下面是一个示例代码片段,演示了如何在 Koa 中设置静态目录和使用 koa2-swagger-ui: ```javascript const Koa = require('koa'); const serve = require('koa-static'); const koaSwagger = require('koa2-swagger-ui'); const app = new Koa(); // 设置静态目录 app.use(serve('public')); // 设置 Swagger UI app.use(koaSwagger({ routePrefix: '/api-docs', // 设置 Swagger UI 的路由路径 swaggerOptions: { url: '/swagger.json', // 设置 Swagger JSON 文件的路径 }, })); // 添加其他路由处理中间件 // ... app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 在上述示例中,静态目录设置为 `public`,Swagger UI 的路由路径设置为 `/api-docs`。这样就可以避免静态目录和 Swagger UI 的冲突。 请根据您的具体需求和项目结构进行适当的调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值