【Node】腾讯云OSS存储上传图片

这篇具有很好参考价值的文章主要介绍了【Node】腾讯云OSS存储上传图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

准备工作

后端Koa

前端Vue

建议


准备工作

购买腾讯云OSS存储后需要获得以下几个变量

SecretId:秘钥id

SecretKey:秘钥

Bucket:存储桶名称 可在腾讯云的图像界面创建存储桶

Region:购买时选择的区域 我这里是南京

prefix:可选 腾讯云中自定义的文件夹名称 我这里是indexImages

const SecretId = "AK**********Od" // 秘钥id
const SecretKey = "zi**********Am" // 秘钥
const Bucket = "b**********9" // 存储桶名称 可在腾讯云的图像界面创建
const Region = "ap-nanjing" // 购买时选择的区域 我这里是南京
const prefix = "indexImages/" // 可选 腾讯云中自定义的文件夹名称 我这里是indexImages

后端项目中下载依赖cos-nodejs-sdk-v5

npm install cos-nodejs-sdk-v5 --save

后端Koa

/router/infoManage.router.js

路由

const Router = require("koa-router")
const { uploadImage } = require("../controller/infoManage.controller")

const infoManageRouter = new Router()

infoManageRouter.post("/indeximages/uploadImages", uploadImage)

module.exports = infoManageRouter

/controller/infoManage.controller.js

控制层

const infoManageService = require("../service/infoManage.service")
const COS = require("cos-nodejs-sdk-v5")
const { SecretId, SecretKey, Bucket, Region, prefix } = require("../app/config")

const cos = new COS({
  SecretId,
  SecretKey
})

class InfoManageController {
  // 上传图像
  async uploadImage(ctx) {
    try {
      const { base64Code, picType } = ctx.request.body // 获取前端传来的base64编码和图片后缀 如png
      const dataBuffer = Buffer.from(base64Code, "base64") // base64 -> 二进制Buffer
      const data = await cos.putObject({
        Bucket, // 存储桶名称
        Region, // 存储桶所在地域
        Key: prefix + new Date().getTime() + `.${picType}`, // 可以理解为图片存储的路径+名称(唯一) 例如:indexImages/1670050961361.png
        Body: dataBuffer, // 上传文件的内容,可以为 FileStream、字符串、Buffer, 我们这里接收二进制Buffer
        onProgress: function (progressData) {
          console.log(progressData)
        }
      })

      const imageUrl = `https://${data.Location}`
      console.log("上传图片的url为", imageUrl)
      await infoManageService.uploadImage(imageUrl) // 把图片url插入到数据库中
      ctx.body = {
        code: 200,
        message: imageUrl
      }
    } catch (error) {
      console.log(error)
    }
  }
}

module.exports = new InfoManageController()

/service/infoManage.service.js

sql

const connection = require("../app/database")
const dateFormat = require("../utils/date-handle")

class InfoManageService {
  // 上传图片
  async uploadImage(imageUrl) {
    const statement = `INSERT INTO indeximages(imageUrl) VALUES(?)`
    await connection.execute(statement, [imageUrl])
    return true
  }
}

module.exports = new InfoManageService()

前端Vue

<template>
  <div id="poster-manage">
    <input
      @change="uploadPhoto($event)"
      type="file"
      accept="image/gif,image/jpeg,image/jpg,image/png"
    />
  </div>
</template>

<script>
import axios from "axios"

export default {
  name: 'PosterManage',
  methods: {
    // 上传图片
    uploadPhoto(e) {
      const filetype = file.name.split('.')[1] // 图片类型 如png
      const myImg = URL.createObjectURL(e.target.files[0])
      const img = new Image()
      img.src = myImg
      img.onload = function () {
        if (img.width !== img.height * 1.5) {
          console.error('图片的宽高比必须为1.5')
        } else {
          // 利用fileReader对象获取file
          const reader = new FileReader()
          reader.readAsDataURL(file)
          reader.onload = function (e) {
            // 读取到的图片base64 数据编码 将此编码字符串传给后台即可
            const imgcode = e.target.result.split('base64,')[1]
            axios.post("/api/uploadImage", {imgcode, filetype}).then((res) => {
              if (res.data.code === 200) {
                console.log('图片添加成功:', res.data.message)
              }
            })
          }
        }
      }
    }
  },
}
</script>

建议

git提交的时候千万不要把密钥等信息提交了,不然你可能会收到如下邮件

【Node】腾讯云OSS存储上传图片

可以创建一个文件.env,在这里添加相关的密钥信息等

【Node】腾讯云OSS存储上传图片

下载dotenv,它会帮助我们将环境变量从 .env 文件加载到中 process.env

config.js

const dotenv = require("dotenv")

dotenv.config()

module.exports = {
  APP_HOST,
  APP_PORT,
  MYSQL_HOST,
  MYSQL_PORT,
  MYSQL_DATABASE,
  MYSQL_USER,
  MYSQL_PASSWORD,

  SecretId,
  SecretKey,
  Bucket,
  Region,
  prefix
} = process.env

最后,记得在.gitignore里加上.env文章来源地址https://www.toymoban.com/news/detail-470578.html

到了这里,关于【Node】腾讯云OSS存储上传图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包