利用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】+云存储(实现图片上传功能)相关推荐

  1. 「VUE架构」VUE2.0 图片上传功能(移动端)

    本文主要介绍VUE2.0图片上传功能的实现.原理是通过js控制和input标签的方式完成这一效果,无需加载其他组件. 效果图如下: 1.DOM代码 1.1input标签 由于我们是通过input标签的 ...

  2. Spring Boot+Vue+阿里云OOS实现图片上传

    网上的案例看了下,感觉可行,就自己改了一部分,补全了一部分,成功上传成功. 后端: pom引入: <dependency><groupId>com.aliyun.oss< ...

  3. Java实现图片上传功能(前后端:vue+springBoot)

    Java实现图片上传功能(前后端:vue+springBoot) 前言: 前端: 组件引入 基础文件上传 自定义上传方法 后端: 需要引入的jar包: 基础文件上传 Controller层: serv ...

  4. 阿里云对象存储OSS图片上传并回显

    阿里云对象存储OSS图片上传并回显 Java代码实现 引入依赖 <!-- 引入阿里云OSS依赖--><dependency><groupId>com.aliyun. ...

  5. 使用阿里云OSS实现图片上传案例

    文章目录 前言 一.OSS是什么? 二.使用步骤 1.开通OSS服务 2.创建bucket 3.创建子账户 4.查看帮助文档,编写后端代码 5.layui前端 总结 前言 在正式的开发环境中,类似图片 ...

  6. Typora+PicGo+腾讯云COS实现图片上传功能

    文章目录 * * 一.前言 * 二.安装Typora和PicGo * 三.[腾讯云](https://l.gushuji.site/tencent)COS创建对象存储 * 四.配置Typora和Pic ...

  7. html实现照片添加功能,HTML5 Canvas调用手机拍照功能实现图片上传功能(图文详解上篇)...

    这篇文章主要为大家详细介绍了HTML5 Canvas,和jquery技术,调用手机拍照功能实现图片上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 因为最近一段时间,一直在弄微信项目,其中涉及到 ...

  8. php layui ajax多图上传,Laravel+Layer实现图片上传功能(整理篇)

    ♩ 背景 昨天在自己的 Laravel5.5 框架项目中,希望集成 Layer 的图片上传功能 但是在 ajax(POST) 提交请求时,一直显示 500 报错 ♪ 分析 ⒈ 问题所在 最后将核心代码 ...

  9. 百度编辑器图片上传功能解疑

    最头疼的上传图片问题 版本选择和自定义配置 项目中使用了百度编辑器ueditor,这里是官网链接,效果还算不错,使用中的一些经验,分享在这里. 我使用的环境是.NET MVC3 最头疼的上传图片问题 ...

  10. Vue.js项目中,当图片无法显示时则显示默认图片

    Vue.js项目中,当图片无法显示时则显示默认图片使用onerror方法 最近在学习Vue时,遇到了一个问题,就是从后台传过来的图片路径无效时,需要在页面显示默认图片 本人试了3种方法,2种方法失败了 ...

最新文章

  1. winrunner事务概念的代码应用(毫秒级)
  2. POJ 3368 Frequent values 线段树区间合并
  3. shell提示符的个性化设定
  4. android 应用状态,保持应用程序状态在Android上
  5. 嵌入式系统中看门狗概述。。。
  6. python检测屏幕图像_Python超级教程,使用Python进行检测面部特征
  7. 【linux】 linux 查看系统信息
  8. 最不可思议的职场语录
  9. 和python哪个容易胖_哪些吃了最容易长胖呢?
  10. 用Excel快速新建空白文件夹
  11. Python MyQR 生成不一样的二维码
  12. node.js云学堂微信小程序学习系统的设计与实现毕业设计源码011735
  13. snipaste滚动截图方法_如何在电脑上截图?教你3种常用的截图方法,利用快捷键效果最快...
  14. LeetCode 340. 至多包含 K 个不同字符的最长子串 (滑动窗口)
  15. 计算机网络性能指标:速率、带宽和吞吐量
  16. 有什么JAVA 网站或者论坛资料丰富呢
  17. linux双系统怎么进tty,HI3556V200 Linux+Liteos双系统学习(4)----双系统通信 IPCM/virt_tty/sharefs...
  18. 【LeetCode】老虎证券面试-括号嵌套且满足优先级
  19. 微星主板刷新BIOS指南
  20. 理想主义者--理查德.马修.斯托曼(GNU的传奇)

热门文章

  1. 【JavaLearn】 # (2)类和对象、变量、构造方法、普通方法、this关键字
  2. 网络流24题(部分)
  3. C语言(谭浩强版本,主讲人:小甲鱼)P41-P49
  4. element-ui表格表头插入icon
  5. 服务器控件与客户端控件
  6. 【C++从青铜到王者】第十八篇:C++之多态
  7. 窗口看门狗和独立看门狗区别
  8. Linux发行版本及常用国产系统+系统优化
  9. 7-5 循环日程表 (10 分)
  10. java 调用jar_在Java程序中执行另一个jar