【vue.js】+云存储(实现图片上传功能)
利用vue.js+element-ui实现云存储上传图片功能
文章目录
- 前言
- 一、对象存储
- 二、配置腾讯云Cos
- 1.引入库
- 第一步拥有腾讯云的开发者账号
- 实名认证
- 三、新建文件上传组件
- 新建上传图片组件 src/components/ImageUpload/index.vue
- detail 详情页引入构成部分
- 给detail页创建一个路由,因为当前写的’查看‘是二级导航跳转所以创建路由时应该写成
- 效果图
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、对象存储
示对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。通过控制台、API、SDK 和工具等多样化方式,用户可简单、快速地接入 COS,进行多格式文件的上传、下载和管理,实现海量数据存储和管理。
二、配置腾讯云Cos
1.引入库
代码如下(示例):
目标 : 配置一个腾讯云cos
我们不希望把所有的图片都上传到我们自己的官方服务器上,这里我们
可以采用一个腾讯云的图片方案
第一步拥有腾讯云的开发者账号
实名认证
下一步,扫描二维码授权
点击领取免费产品
选择对象存储COS
到这一步,账号的部分就操作完毕,接下来,我们需要来创建一个存储图片的存储桶
登录 对象存储控制台 ,创建存储桶。设置存储桶的权限为 公有读,私有写
创建存储桶
设置cors规则
AllowHeader 需配成 * ,
到这里,我们的腾讯云存储桶就设置好了。
三、新建文件上传组件
安装JavaScript SDK
npm i cos-js-sdk-v5 --save
新建上传图片组件 src/components/ImageUpload/index.vue
上传组件,我们可以沿用element的el-upload组件,并且采用照片墙的模式 listtype=“picture-card”
<template><div><el-uploadlist-type="picture-card":limit="4"action="#":file-list="fileList":on-preview="preview":http-request="upload":on-change="change":before-upload="beforeUpload":accept="typeList":on-remove="handleRemove"><i class="el-icon-plus" /></el-upload><el-progressv-if="showPercent"style="width: 180px":percentage="percent"/><el-dialog title="图片" :visible.sync="showDialog"><img :src="imgUrl" style="width: 100%" alt="" /></el-dialog></div>
</template>
<script>
import COS from 'cos-js-sdk-v5'
const cos = new COS({SecretId: 'xxx', // 密钥idSecretKey: 'xxx' // 密钥 key
}) // 实例化的包 已经具有了上传的能力 可以上传到该账号里面的存储桶了
export default {data() {return {fileList: [], // 图片地址设置为数组showDialog: false, // 控制显示弹层imgUrl: '',currentImageUid: null,typeList: 'image/*',showPercent: false, // 是否显示进度条percent: 0 // 上传进度}},methods: {preview(file) {this.imgUrl = file.urlthis.showDialog = true},beforeUpload(file) {// 允许上传的文件类型const types = ['image/jpeg', 'image/gif', 'image/bmp', 'image/png']if (!types.includes(file.type)) {this.$message.error('上传图片只能是 JPG、GIF、BMP、PNG 格式!')return false // return false 会阻止图片的上传操作}const maxSize = 1024 * 1024if (file.size > maxSize) {this.$message.error('图片大小最大不能超过1M')return false}this.currentImageUid = file.uidthis.showPercent = truereturn true},upload(params) {// console.log(params.file)if (params.file) {// 执行上传操作cos.putObject({Bucket: 'xxx', // 存储桶Region: 'ap-nanjing', // 地域Key: params.file.name, // 文件名Body: params.file, // 要上传的文件对象StorageClass: 'STANDARD', // 上传的模式类型 直接默认 标准模式即可onProgress: (progressData) => {this.percent = progressData.percent * 100}}, (err, data) => {// data返回数据之后 应该如何处理if (err) returnthis.fileList = this.fileList.map(item => {if (item.uid === this.currentImageUid) {return { url: 'http://' + data.Location, name: item.name }}return item})// console.log(this.fileList)})}},handleRemove(file, fileList) {this.fileList = this.fileList.filter(item => item.uid !== file.uid)// console.log(file)cos.deleteObject({Bucket: 'xxx', /* 必须 */Region: 'ap-nanjing', /* 存储桶所在地域,必须字段 */Key: file.name /* 必须 */}, (err, data) => {// console.log(err || data)})},change(file, fileList) {this.fileList = fileList}}
}
</script>
detail 详情页引入构成部分
<template><div class="app-container"><el-card><el-tabs><el-tab-pane label="个人详情"><user-info /></el-tab-pane><el-tab-pane label="重置密码"><!-- 放置表单 --><el-formlabel-width="120px"style="margin-left: 120px; margin-top: 30px"><el-form-item label="密码:"><el-input style="width: 300px" type="password" /></el-form-item><el-form-item label="确认密码:"><el-input style="width: 300px" type="password" /></el-form-item><el-form-item><el-button type="primary">重置</el-button></el-form-item></el-form></el-tab-pane><el-tab-pane label="部门信息"><department /></el-tab-pane><el-tab-pane label="选择头像"><image-upload /></el-tab-pane></el-tabs></el-card></div>
</template>
<script>
import userInfo from './component/Userinfo'
import department from './component/Department'
import imageUpload from '@/components/ImagUpload'export default ({components: {'user-info': userInfo,'department': department,'image-upload': imageUpload},// methods: {upload(e) {const file = e.target.files[0]const reader = new FileReader()reader.readAsDataURL(file)reader.onload = async function (e) {await upload({file: {originalname: '11.jpg',file: e.target.result}})}}}})
</script>
给detail页创建一个路由,因为当前写的’查看‘是二级导航跳转所以创建路由时应该写成
import Layout from '@/layout'
export default {path: '/user',component: Layout,children: [{path: 'index',component: () => import('@/views/user/index'),name: 'user',meta: {title: '用户管理',icon: 'account'}},{path: 'detail',component: () => import('@/views/user/detail'),name: 'detail',hidden: true,meta: {title: '用户详情',icon: 'account'}}]
}
效果图
点击查看:
选择头像:
再看下云存储中是否已上传:
【vue.js】+云存储(实现图片上传功能)相关推荐
- 「VUE架构」VUE2.0 图片上传功能(移动端)
本文主要介绍VUE2.0图片上传功能的实现.原理是通过js控制和input标签的方式完成这一效果,无需加载其他组件. 效果图如下: 1.DOM代码 1.1input标签 由于我们是通过input标签的 ...
- Spring Boot+Vue+阿里云OOS实现图片上传
网上的案例看了下,感觉可行,就自己改了一部分,补全了一部分,成功上传成功. 后端: pom引入: <dependency><groupId>com.aliyun.oss< ...
- Java实现图片上传功能(前后端:vue+springBoot)
Java实现图片上传功能(前后端:vue+springBoot) 前言: 前端: 组件引入 基础文件上传 自定义上传方法 后端: 需要引入的jar包: 基础文件上传 Controller层: serv ...
- 阿里云对象存储OSS图片上传并回显
阿里云对象存储OSS图片上传并回显 Java代码实现 引入依赖 <!-- 引入阿里云OSS依赖--><dependency><groupId>com.aliyun. ...
- 使用阿里云OSS实现图片上传案例
文章目录 前言 一.OSS是什么? 二.使用步骤 1.开通OSS服务 2.创建bucket 3.创建子账户 4.查看帮助文档,编写后端代码 5.layui前端 总结 前言 在正式的开发环境中,类似图片 ...
- Typora+PicGo+腾讯云COS实现图片上传功能
文章目录 * * 一.前言 * 二.安装Typora和PicGo * 三.[腾讯云](https://l.gushuji.site/tencent)COS创建对象存储 * 四.配置Typora和Pic ...
- html实现照片添加功能,HTML5 Canvas调用手机拍照功能实现图片上传功能(图文详解上篇)...
这篇文章主要为大家详细介绍了HTML5 Canvas,和jquery技术,调用手机拍照功能实现图片上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 因为最近一段时间,一直在弄微信项目,其中涉及到 ...
- php layui ajax多图上传,Laravel+Layer实现图片上传功能(整理篇)
♩ 背景 昨天在自己的 Laravel5.5 框架项目中,希望集成 Layer 的图片上传功能 但是在 ajax(POST) 提交请求时,一直显示 500 报错 ♪ 分析 ⒈ 问题所在 最后将核心代码 ...
- 百度编辑器图片上传功能解疑
最头疼的上传图片问题 版本选择和自定义配置 项目中使用了百度编辑器ueditor,这里是官网链接,效果还算不错,使用中的一些经验,分享在这里. 我使用的环境是.NET MVC3 最头疼的上传图片问题 ...
- Vue.js项目中,当图片无法显示时则显示默认图片
Vue.js项目中,当图片无法显示时则显示默认图片使用onerror方法 最近在学习Vue时,遇到了一个问题,就是从后台传过来的图片路径无效时,需要在页面显示默认图片 本人试了3种方法,2种方法失败了 ...
最新文章
- winrunner事务概念的代码应用(毫秒级)
- POJ 3368	Frequent values 线段树区间合并
- shell提示符的个性化设定
- android 应用状态,保持应用程序状态在Android上
- 嵌入式系统中看门狗概述。。。
- python检测屏幕图像_Python超级教程,使用Python进行检测面部特征
- 【linux】 linux 查看系统信息
- 最不可思议的职场语录
- 和python哪个容易胖_哪些吃了最容易长胖呢?
- 用Excel快速新建空白文件夹
- Python MyQR 生成不一样的二维码
- node.js云学堂微信小程序学习系统的设计与实现毕业设计源码011735
- snipaste滚动截图方法_如何在电脑上截图?教你3种常用的截图方法,利用快捷键效果最快...
- LeetCode 340. 至多包含 K 个不同字符的最长子串 (滑动窗口)
- 计算机网络性能指标:速率、带宽和吞吐量
- 有什么JAVA 网站或者论坛资料丰富呢
- linux双系统怎么进tty,HI3556V200 Linux+Liteos双系统学习(4)----双系统通信 IPCM/virt_tty/sharefs...
- 【LeetCode】老虎证券面试-括号嵌套且满足优先级
- 微星主板刷新BIOS指南
- 理想主义者--理查德.马修.斯托曼(GNU的传奇)