Node.js+element-ui 上传图片到七牛云(详细步骤附代码)

Node.js+element-ui 上传图片到七牛云(详细步骤附代码)

1. 七牛云平台部分

选择对象存储,新建一个存储空间,里面包含你的文件外链

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
后续所需要的参数可在以上内容查看。

2. 后端部分

npm install qiniu
npm install multer

在这里插入图片描述

router/qn.js
const express = require("express");
// 创建路由对象
const router = express.Router();

// 导入用户路由处理函数模块
const qnHandler = require("../router_handler/qn");

// 获取七牛云token
router.get("/getQnToken", qnHandler.getQnToken);

// 将路由对象共享出去
module.exports = router;

router_handler/qn.js
/*
七牛云配置
*/
const qiniu = require("qiniu");

// 登录的处理函数
exports.getQnToken = (req, res) => {
  // 创建上传凭证
  const accessKey = "xxx";//个人中心中有
  const secretKey = "xxx";//个人中心中有
  const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
  const options = {
    scope: "xxx",//空间名称
    expires: 7200, //过期时间(s) 2h
  };
  const putPolicy = new qiniu.rs.PutPolicy(options);
  const uploadToken = putPolicy.uploadToken(mac);

  res.send({
    status: 0,
    msg: "获取七牛云token成功",
    data: uploadToken, //将token返回给前端
  });
};

3. 前端部分

<el-upload
	class="avatar-uploader"
	action="https://jsonplaceholder.typicode.com/posts/"
	:show-file-list="false"
	:on-success="handleAvatarSuccess"
	:before-upload="beforeAvatarUpload"
>
	<img v-if="imageUrl" :src="imageUrl" class="avatar" />
	<i v-else class="el-icon-upload avatar-uploader-icon"></i>
</el-upload>
utils/qn.config
/*
  七牛云相关配置 
*/

// 七牛云的上传地址,根据自己所在地区选择,我是华南区
const domain = "https://upload-z2.qiniup.com";
// 这是七牛云空间的外链默认域名
const qiniuAddr = "xxx";

export { domain, qiniuAddr };

<script>
import { domain, qiniuAddr } from "@/utils/qn.config";
</script>
metheod: {
async registerNow(){
	  //1.先从后端获取七牛云token
      let token = "";
      //调用后端接口
      const res = await requestHttp({
        api: api.QNTOKEN_GET_API,
        method: "GET",
      });
      if (res.status != 0) {
        this.$message.error(res.msg || "获取七牛云token失败");
      }
      if (res.status == 0) {
        token = res.data; //获取到七牛云token
      }
      const config = {
        headers: { "Content-Type": "multipart/form-data" }, //上传文件所需headers格式
      };
      let filetype = "";
      if (this.file.type === "image/png") {
        filetype = "png";
      } else {
        filetype = "jpg";
      }
      // 重命名要上传的文件
      const name =
        "avatar/" + moment(new Date()).format("YYYYMMDDHHMMSS") + filetype; // avatar/ 为自定义文件夹路径
      // 上传到七牛云
      const formData = new FormData();
      formData.append("file", this.file);
      formData.append("token", token);
      formData.append("key", name);
      //2.将图片上传到七牛云
      const res2 = await requestHttp(
        {
          api: domain,
          method: "POST",
          params: formData,
        },
        config
      );
      // console.log(res2.key); //图片路径
      // console.log("http://" + qiniuAddr + "/" + res2.key);// 图片地址
}
handleAvatarSuccess(res, file) {
      this.file = file.raw;
      // console.log(file);
      // console.log(file.raw);
      this.imageUrl = URL.createObjectURL(file.raw);
      // console.log(this.imageUrl);
    },
    beforeAvatarUpload(file) {
      const isJPG = file.type === "image/jpeg";
      const isLt2M = file.size / 1024 / 1024 < 2;
      if (!isJPG) {
        this.$message.error("上传头像图片只能是 JPG 格式!");
      }
      if (!isLt2M) {
        this.$message.error("上传头像图片大小不能超过 2MB!");
      }
      return isJPG && isLt2M;
    },
}
  • 55
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值