leiwuhen-67's blog leiwuhen-67's blog
首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)

我的公众号

首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)
  • Vue2

    • 项目国际化
    • element ui之图片预览
    • element ui之图片上传到阿里云oss上
    • element ui之表格拖拽排序
    • vue动态添加路由后刷新页面白屏问题
    • vue项目安装依赖报错
    • vue项目使用postcss-pxtorem来实现移动端适配
    • vue之低版本浏览器兼容
    • eslint报错汇总
  • Vue3

  • 《Vue》笔记
  • Vue2
心欲无痕
2023-03-02

element ui之图片上传到阿里云oss上

今天在使用 element ui 中 Upload 组件上传图片到阿里云 oss 上折腾了许久,一直被官网 demo 中的 action 困扰,折腾一番后最后放弃了这种方法,选择了 http-request 这种方法,覆盖默认的上传行为,自定义上传的实现。

<el-upload
	class="link-uploader"
	action
	:http-request="handleAvatarSuccess"
	:show-file-list="false">
	  <img
      v-if="dialogForm.picUrl"
      :src="dialogForm.picUrl"
      class="avatar">
    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
1
2
3
4
5
6
7
8
9
10
11

这里需要先获取 oss 上传签名,获取这种数据

其次,开始自定义上传方法:

handleAvatarSuccess (file) {
  this.toOss(file)
},
async toOss (file) {
  const request = new FormData()
  const imgType = file.file.name.split('.')[1]
  const name = file.file.name.split('.')[0]
  // 文件名字,可设置路径
  const imgName = name + this.UUID() + '.' + imgType
  const imgUrl = `${this.OssParams.host}/${this.OssParams.dir}${imgName}`
  request.append('key', `${this.OssParams.dir}${imgName}`)
  // policy规定了请求的表单域的合法性
  request.append('policy', this.OssParams.policy)
  request.append('OSSAccessKeyId', this.OssParams.accessId)
  // 让服务端返回200,不然,默认会返回204
  request.append('success_action_status', '200')
  request.append('callback', this.OssParams.callback)
  request.append('Signature', this.OssParams.signature)
  // 需要上传的文件filer
  request.append('name', imgName)
  request.append('type', file.file.type)
  request.append('file', file.file)
  await uploadToOss(this.OssParams.host, request)   // 该方法为封装的发送请求到oss的方法
  this.dialogForm.giftImg = imgUrl
},
UUID () {
  let d = new Date().getTime()
  const uuid = 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = (d + Math.random() * 16) % 16 | 0
    d = Math.floor(d / 16)
    return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16)
  })
  return uuid
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

这里使用 form 表单的方法上传的,需要注意的是 upload 组件中 action 是必传参数,所以虽然用不到 action 属性,但是还是要保留该属性,否则会报错。

编辑 (opens new window)
上次更新: 7/1/2024, 4:56:33 PM
element ui之图片预览
element ui之表格拖拽排序

← element ui之图片预览 element ui之表格拖拽排序→

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式