Vue+NodeJS上传图片到腾讯云Cos

一.前端Vue

1.选择图片

--HTML
<input type="file" accept="image/*" @change="handleFileChange">
<el-button  size="large" @click="changeAvatar">上传头像</el-button>
//选择图片
function handleFileChange(event){const selectedFile = event.target.files[0];if (!selectedFile) {return;}//定义图片可传入的类型const allowedTypes = ['image/jpeg', 'image/png','image/jpg'];//定义图片的最大尺寸--字节const maxSize = 1000000; if (!allowedTypes.includes(selectedFile.type)) {return;}if (selectedFile.size > maxSize) {return;}}

2.实现上传前的本地预览

--HTML
<img  style="border-radius: 50%;"  :src="DataUrl" alt="">
//定义数据
const DataUrl=ref('')function handleFileChange(event){
//图片大小,类型验证
......//读取数据
const reader=new FileReader()
reader.onload=e=>{DataUrl.value=e.target.result}
reader.readAsDataURL(selectedFile)}

此时读取后得到的是

后面包含base64,将base64上传到后端进行处理 ,如果图片文件稍大,后端就会出现请求体过长的错误.不适合大文件上传.我们这里就只用它来做本地预览

3.获取上传到后端必须的数据

//定义数据
const imgType=ref('')
const code=ref({}) function handleFileChange(event){
//图片大小,类型验证
......//得到图片的类型后缀
const index=selectedFile.type.indexOf('/')
imgType.value=selectedFile.type.slice(index+1)
//包括开始,不包括结尾//selectedFile--图片对象
code.value=selectedFile//读取数据
...}

4.上传图片

async function changeAvatar(){const formData = new FormData();formData.append('image',code.value); //图片对象formData.append('fileType', imgType.value); // 添加文件类型信息await axios.post('http://127.0.0.1:3000/upload',formData).then((response) => {// 处理后端的响应console.log('上传成功',response );}).catch((error) => {// 处理上传失败的情况console.error('上传失败', error);});
}

二.后端

后续需要的第三方包

npm i expressnpm i cos-nodejs-sdk-v5npm i corsnpm i multernpm i dotenv
"cors": "^2.8.5","cos-nodejs-sdk-v5": "^2.12.4","dotenv": "^16.3.1","express": "^4.18.2","multer": "^1.4.5-lts.1",

1.express服务搭建

const express = require('express')			
const cors = require('cors');	
const multer = require('multer'); // 处理文件上传的中间件		
const app = express()
app.use(cors()) //跨域处理// 配置文件上传的存储路径和文件名
const storage = multer.memoryStorage(); // 在内存中处理文件上传
const upload = multer({ storage });//COS图片上传请求
router.post('/upload', upload.single('image'), async(req, res) => {const uploadedImage = req.file;const fileType = req.body.fileType; // 从请求体中获取文件类型if (!uploadedImage) {return res.status(400).send('没有上传文件');}const avatar_url=await uploadImage(req.file,fileType)res.send({data:{avatar_url}})
});app.listen(3000, () => {console.log('server running ...');})

2.上传到腾讯云Cos

const COS = require('cos-nodejs-sdk-v5')
const {SecretId,SecretKey,Bucket,Region}=require('../config')const cos = new COS({SecretId,SecretKey,
})const path="avatar/"  //腾讯云Cos桶下的文件夹async function uploadImage(img,type) {try {const data = await cos.putObject({Bucket, // 存储桶名称Region, // 存储桶所在地域Key:path + new Date().getTime()+`.${type}`, // 可以理解为图片存储的路径+名称(唯一) 例如:indexImages/1670050961361.pngBody: img.buffer, // 上传文件的内容,可以为 FileStream、字符串、Buffer, 我们这里接收二进制BufferonProgress: function (progressData) {console.log(progressData)}})const imageUrl = `https://${data.Location}`return imageUrl}catch (error) {console.log(error)}}module.exports = uploadImage

3.配置文件

新建一个.env文件

# COS
SecretId='密钥ID'
SecretKey='密钥'
Bucket='桶名称'
Region='所在地域'

新建一个config.js文件

const dotenv = require("dotenv")dotenv.config()module.exports = {SecretId,SecretKey,Bucket,Region,
} = process.env

到此Vue上传图片到COS就完成了,后续可以将图片链接存到数据库进行操作.代码有错误的地方欢迎指正.如果使用出现错误也可留言.同时也要注意你的COS权限开放问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/104092.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringAOP的实现机制(底层原理)、应用场景等详解

SpringAOP的实现机制&#xff08;底层原理&#xff09;应用场景等详解 ​ Spring框架是Java开发中最流行的应用程序框架之一。它提供了广泛的功能&#xff0c;其中之一就是面向切面编程&#xff08;AOP&#xff09;。Spring AOP允许我们将关注点&#xff08;例如日志记录、事务…

js摄像头动态检测

利用摄像头每一秒截图一次图像。然后计算2次图像之间的相似度。 如果相似度低于98%就会报警。 var video document.getElementsByClassName(inputvideo)[0]; video.innerHTML "<video classinput_video idcamera autoplay width640px height380px></video>…

利用procrank和lsof定位出客户软件内存OOM的问题

最近遇到一些事情&#xff0c;觉得挺憋屈的&#xff0c;可是再憋屈总得往前走吧&#xff01;打工人&#xff0c;不好办啊&#xff01;事情是这样的&#xff0c;笔者在芯片原厂负责SDK和行业解决方案输出的&#xff0c;可以理解成整体SDK turnkey方案。但是有些客户多少还要改一…

CSS笔记(黑马程序员pink老师前端)圆角边框

圆角边框 border-radius:length; 效果显示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…

【Linux】网络编程网络基础(C++)

目录 一、计算机网络背景 二、认识 "协议" 三、网络协议初识 【3.1】协议分层 【3.2】OSI七层模型 【3.3】TCP/IP五层(或四层)模型 四、网络传输基本流程 【4.1】网络传输流程图 【4.2】数据包封装和分用 五、网络中的地址管理 一、计算机网络背景 【独立…

【周末闲谈】如何利用AIGC为我们创造有利价值?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录 系列目录前言AIGCAI写作AI绘画AI视频生成AI语音合成 前言 在此之…

用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections

今天用Navicat进行数据备份的时候&#xff0c;发现由于数据库连接数目过多导致连接锁定&#xff0c;这种情况在多人协同开发的场景中很常见。当然我这里也因为多个应用使用了数据库连接&#xff0c;所以出现了Too Many Connections。 可能是超过最大连接数了。 1、进入Navicat…

AUTOSARCAN-Tp协议

目录 一.单帧、首帧、连续帧、流控帧 单帧传输 SF单帧&#xff1a; 多帧传输 FF&#xff08;首帧&#xff09;&#xff1a; CF&#xff08;连续帧&#xff09;&#xff1a; FC&#xff08;流控帧&#xff09;&#xff1a; 一.单帧、首帧、连续帧、流控帧 CAN诊断由发送端…

MAC ITEM 解决cd: string not in pwd的问题

今天使用cd 粘贴复制的路径的时候,报了这么一个错. cd: string not in pwd eistert192 Library % cd Application Support cd: string not in pwd: Application eistert192 Library % 让人一脸懵逼. 对比一下,发现中文路径里的空格截断了路径 导致后面的路径就没有办法被包含…

视频汇聚/视频云存储/视频监控管理平台EasyCVR启动时打印starting server:listen tcp,该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成&#xff0c;…

模糊测试面面观 | 模糊测试是如何发现异常情况的?

协议模糊测试是一种用于评估通信协议、文件格式和API实现系统安全性和稳定性的关键技术。在模糊测试过程中&#xff0c;监视器扮演着关键角色&#xff0c;它们能够捕获异常情况、错误响应、资源利用等&#xff0c;为测试人员提供有价值的信息&#xff0c;有助于发现潜在漏洞和问…

530. 二叉搜索树的最小绝对差

给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1示例 2&#xff1a; 输入&#xff1a;root [1,…