vue-oss阿里云上传图片

2023-10-29

先搭建vue框架,配置路由、添加图片上传页面链接、添加图片上传页面,

image.png

然后进行以下操作:

1. 首先到阿里云上面开通oss服务

2. 安装ali-oss包,vue项目根目录下执行命令- - -‘npm install ali-oss --save’

安装ali-oss包,并记录到package.json文件- - -开发环境(devDependencies)和生产环境(dependencies)都需要安装这个依赖包 (–save -dev的表示只有开发环境安装依赖包)

3. 安装完成后,script中导入ali-oss包- - -“import OSS from ‘ali-oss’”

4. data(){}返回数据中创建oss对象,使用oss对象的put()方法上传文件:

注意:保管好自己的AccessKey账户信息,不要给别人看,避免信息泄露

创建oss对象:

data () {
    return {
      // 创建oss对象
      client: new OSS({
        region: '在oss上开通的信息',
        bucket: '阿里云oss创建的存储空间名',
        accessKeyId: '阿里云上查看自己的accessKeyId',
        accessKeySecret: '阿里云上查看自己的accessKeySecret'
      })
    }
  },

这几个属性名称是固定的,注意不要写错了

put()方法上传文件:

// put('上传的文件的名称', 上传的文件) 注意文件名称要是唯一的,所以这里使用了随机函数
this.client.put(`${Math.random()}-${file.name}`, file)

region值:

region值.png

查看AccessKey管理控制位置:

image.png

5. 注意要到阿里云上进行配置跨域设置:

防止上传文件失败,具体配置可根据自己需求,
没有进行跨域配置会报错如下:

上传失败报错现象.png

解决方法:

上传失败跨域问题设置.png
上传失败跨域问题设置2.png
上传失败跨域问题设置3.png

6. 给设置的RAM子账户添加OSS管理权限,不然也会上传失败

上传失败现象:

上传失败2问题(403)现象.png
解决方法:

上传失败2问题(403).png
上传失败2问题(403)_解决办法.png

7. 注意要到阿里云进行文件读取权限修改:

防止上传后,不能在本地读取到上传的文件
没有修改默认阿里云文件读取权限:

上传OSS后读取失败问题.png

修改方法:

上传OSS后读取失败问题解决1.png
上传OSS后读取失败问题解决2.png
上传OSS后读取失败问题解决3.png
上传OSS后读取失败问题解决4.png

完整代码示例:

<template>
  <div>
    <label for="upload" class="img-choose" :class="{upLoading: isUploading}">图片上传</label>
    <input type="file" name="" id="upload" accept="image/*" multiple style="display: none;" :disabled="isUploading" @change="onChange" ref="file">
    <p class="tips">一次可以选择多张图片,每次最多选择9张图片(单张图片大小 &lt; 1M)</p>
    <ul class="img-list">
      <li v-for="(item, index) in imgList" :key="index" :style="{background: `url(${item}) no-repeat center/cover`}"></li>
    </ul>
  </div>
</template>

<script>
// 引入阿里云oss包
import OSS from 'ali-oss'
const ACCESSKEY = {
  ID: '填写你自己的阿里云accessKeyId',
  SECRET: '填写你自己的阿里云accessKeySecret'
}
export default {
  data () {
    return {
      // 创建OSS对象
      client: new OSS({
        region: 'oss-cn-beijing',
        bucket: 'picuploadstudy',
        accessKeyId: ACCESSKEY.ID,
        accessKeySecret: ACCESSKEY.SECRET
      }),
      imgList: [],
      isUploading: false
    }
  },
  methods: {
    onChange () {
      // 可选链
      const picFiles = this.$refs?.file?.files
      console.log(picFiles)
      // 校验
      if (picFiles.length > 9) {
        alert('每次最多选择9张图片')
        return false
      }
      const files = []
      for (const file of picFiles) {
        const picSize = file.size / 1024 / 1024 // 单位转换成 M
        if (picSize > 1) {
          alert('单张图片大小不得超过 1M')
          return false
        }
        files.push(file)
      }
      // 图片上传至OSS
      // this.ossUploadPic(files)
      this.ossUploadPic2(files)
    },
    // 方法一:异步上传图片至阿里云OSS(Promise)
    ossUploadPic (files) {
      this.isUploading = true
      const upLoadRequest = []
      for (const file of files) {
        upLoadRequest.push(new Promise((resolve, reject) => {
          this.client.put(`${Math.random()}-${file.name}`, file).then(res => {
            resolve(res.url)
          }).catch(err => {
            console.log(err)
            reject(err)
          })
        }))
      }
      // 读取上传的图片
      Promise.allSettled(upLoadRequest).then(res => {
        console.log(res)
        const imgUrls = []
        for (const item of res) {
          if (item.status === 'fulfilled') {
            imgUrls.push(item.value)
          }
        }
        this.imgList = imgUrls
        this.isUploading = false
      }).catch(err => {
        console.log(err)
      })
    },
    // 方法二:异步同步化 async + await
    async ossUploadPic2 (files) {
      this.isUploading = true
      const imgUrls = []
      for (const file of files) {
        const res = await this.client.put(`${Math.random()}-${file.name}`, file)
        imgUrls.push(res.url)
      }
      this.imgList = imgUrls
      this.isUploading = false
    }
  }
}
</script>

<style scoped>
.img-choose {
  display: block;
  width: 100px;
  height: 50px;
  margin-left: 60px;
  line-height: 50px;
  color: #fff;
  background-color: #42B983;
  border-radius: 5px;
}
.tips {
  color: #999;
}
.upLoading {
  background-color: #ccc;
}
.img-list {
  margin-left: 60px;
}
.img-list > li{
  float: left;
  list-style: none;
  width: 150px;
  height: 100px;
  margin: 0 30px 30px 0;
  border: 1px solid #ccc;
}
</style>>

小提示: vue 的<style scoped>标签中添加scoped- - -改文件下面写的样式仅对本文件有效,对其他文件无效,就算不同文件之间有相同的类名,也不会相互影响,没有写scoped的话,可能有影响

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue-oss阿里云上传图片 的相关文章

随机推荐

  • 石墨文档,幕布,Effie,开箱评论者写出好评或差评之前的选择……

    拿着鸡蛋换石头这样的故事 多是出现在笑话大全里 想到这个画面让人觉得交易中买家脑子似乎坏掉了 笑话揭露了不公平 可在这商贾云集的当下 不对等的交易却屡见不鲜 当偶然成为了小概率 继而转变成潜移默化之后 买东西就成了一场不明就里的 押宝 谁都
  • sybase :数据库不能打开的解决办法(状态装载或可疑)

    平台资料 操作系统平台 Windows 2000 5 00 2195 Service Pack 4 数据库平台 Sysbase 12 5 server db jc database db text db jd db jh db app 现象
  • python中strip()函数的详解

    一 背景 最近对于字符串处理的过程中对strip 函数的功能不是很了解 此篇博客就对strip 函数进行解读 strip函数的解释 就字面上的意思就是 返回删除前导和尾随空格的字符串副本 如果给定了chars而不是None 则删除chars
  • 高德地图的测试key_获取高德地图key

    概述 高德地图key的设置位于系统 APP iPhone App 设置 SDK设置中 它主要用于定位 如门店系统中 开启定位 可以从APP上看到距离最近的门店 定位功能可实现 但在后台中无配置组件 如要在APP中使用定位功能 请联系响站技术
  • 测试开发 -- python实现dubbo接口的调用

    由于公司使用基于Java语言的 Dubbo技术栈 而本人对Python技术栈更为熟悉 为了使不懂JAVA代码的同学也能进行Dubbo接口层的测试 总结一个通过python实现dubbo接口调用的实现方案 一 实现原理 根据Dubbo官方文档
  • 乱糟糟的YOLOv8-detect和pose训练自己的数据集

    时代在进步 yolo在进步 我还在踏步 v8我浅搞了一下detect和pose 记录一下 我还是要吐槽一下 为啥子这个模型就放在了这个文件深处 如图 以下教程只应用于直接应用yolov8 不修改 我之前搞v7的环境 直接 pip insta
  • vs2017项目配置

    右击项目属性 一 常规配置 可以选择windos SDK版本 平台工具集 编译过程中一些编译工具的选择 输出目录 编译生成文件所在路径 配置类型 选择是动态库 静态库 还是执行程序 二 调试配置 工作目录 项目所在路径 比如动态链接库调用
  • Ubuntu-向日葵开机自启

    向日葵官方下载网址 向日葵远程控制app官方下载 贝锐向日葵官网 安装好向日葵后 打开终端 输入命令 查看软件信息 dpkg L sunloginclient 看到向日葵的安装路径是 路径是 usr local sunlogin bin s
  • Apache Struts2远程代码执行漏洞(CVE-2021-31805)安全通告

    1 事件描述 监测发现 开源应用框架Apache Struts存在远程代码执行漏洞 CVE 2021 31805 攻击者可构造恶意的OGNL表达式触发漏洞 实现远程代码执行 受影响版本为Apache Struts 2 0 0 2 5 29
  • Qt中两个窗口相互操作

    Qt中两个窗口相互操作 举一个栗子就是两个窗口相互关闭 窗口1中的pushbutton关闭窗口2 窗口2中的pushbutton关闭窗口1 Qt中的窗口都是一个一个的类 所以最开始就想到了使用类的操作方法 即使用指针 否则两个类无限调用 如
  • linux下mycat读写分离的配置

    夏尔先生 linux下mycat读写分离的配置 为什么要配置读写分离 我想我就不需要再赘述了 那么在mycat下如何进行读写分离的配置 配置之后的实际效率又如何呢 我上午根据文档捣鼓和测试了一下 这里做一下记录 最开始 我们还是要配置mys
  • MySQL单机版Recycle Bin回收站功能

    最近调研了阿里的Recycle Bin回收站功能 可以保证数据不丢失 为了防止开发或运维人员的误操作 比如DROP TABLE DATABASE TRUNCATE TABLE 这类DDL语句不具有可操作的回滚特性 而导致数据丢失 AliSQ
  • MVC和MVVM模式的概念与区别

    MVC和MVVM模式的概念与区别 1 MVC编程模式 MVC的概念 MVC是Model View Controller的简写 即模型 视图 控制器 运作流程 Model 和 View 是完全分离的 由 Controller 作为中间人来负责
  • vue微信分享朋友圈{realAuthUrl: “[https://byj.ink/#/index, https://byj.ink/#/index]“, errMsg: “config:invali

    vue微信分享朋友圈总是提示 realAuthUrl https byj ink index https byj ink index errMsg config invalid signature 我的天 已经调了两周了 想哭 代码如下 u
  • ‘git’ 不是内部或外部命令,也不是可运行的程序或批处理文件;fatal: not a git repository (or any of the parent directories): .git

    一 git 不是内部或外部命令 也不是可运行的程序或批处理文件 cmd 里面运行git提示 不是内部或外部命令 也不是可运行的程序或批处理文件 打开网址https gitforwindows org 下载Git For Windows并安装
  • 配置nginx安装信息时报错 ./configure: error: the HTTP rewrite module requires the PCRE library.You can..... 处理

    出现错误过程 Linux终端运行nginx配置信息 运行后 发现最后一行需要修改 configure prefix usr local nginx pid path var run nginx nginx pid lock path var
  • 《统计学习方法》笔记(十三)--EM

    EM本身是一种迭代算法 目的是实现含有隐变量的模型参数的极大似然估计 以及后验分布的众数 EM也可以用来补全缺失的数据集 在此不做重点考虑 算法描述 输入 观测变量数据Y 隐含变量Z 联合分布P Y Z theta 条件分布P Z Y th
  • Python学习路线图(2022年最新版)

    这是我刚开始学习python时的一套学习路线 从入门到上手 一 Python入门 环境搭建 变量 数据类型 二 Python运算符 条件结构 循环结构 三 Python函数 四 做一次综合练习 做一个控制台的员工管理 需求 员工管理系统功能
  • (c语言)static的用法详解

    前言 static是静止的 静态的意思 那它有什么用呢 今天我们来了解了解 1 修饰局部变量 修饰局部变量时 局部变量出了作用域 不销毁 变量生命周期变长 变成整个程序的生命周期 本质上 static修饰局部变量的时候 改变了变量的存储位置
  • vue-oss阿里云上传图片

    先搭建vue框架 配置路由 添加图片上传页面链接 添加图片上传页面 然后进行以下操作 1 首先到阿里云上面开通oss服务 2 安装ali oss包 vue项目根目录下执行命令 npm install ali oss save 安装ali o