【Vue】Vue+Element-ui+OSS 上传图片

本文介绍如何在Vue项目中使用Element-ui的上传组件,并与阿里云OSS服务结合,实现自定义上传流程,包括安装Element-ui和阿里云OSS,配置上传组件,以及使用OSSsts授权登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、安装Element-ui

2、安装阿里云的OSS

3、项目使用了Element-ui里面的上传组件(组件代码来自Element-ui官网)

4、如何使用OSS sts授权登录


1、安装Element-ui

npm i element-ui -s

2、安装阿里云的OSS

npm install ali-oss

3、项目使用了Element-ui里面的上传组件(组件代码来自Element-ui官网

<el-upload
  class="upload-demo"
  action="https://jsonplaceholder.typicode.com/posts/"
  :http-request="uploadFile"
  :on-change="handleChange"
  :file-list="fileList3">
  <el-button size="small" type="primary">点击上传</el-button>
  <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>
<script>
  export default {
    data() {
      return {
        fileList3: [{
          name: 'food.jpeg',
          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
        }]
      };
    },
    methods: {
      handleChange(file, fileList) {
        this.fileList3 = fileList.slice(-3);
      }
    }
  }
</script>
参数说明类型
action必选参数,上传的地址(接口)string
on-remove文件列表移除文件时的钩子function(file, fileList)
on-success文件上传成功时的钩子function(response, file, fileList)
on-error文件上传失败时的钩子function(err, file, fileList)
on-change文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用function(file, fileList)
before-upload上传文件之前的钩子,参数为上传的文件,若返回 false 则停止上传。(可检验上传文件格式)function(file)
file-list上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}]array
auto-upload是否在选取文件后立即进行上传boolean
http-request覆盖默认的上传行为,可以自定义上传的实现function

element-ui的上传组件在选择文件后默认直接上传到action地址,上传成功on-success方法function(response, file, fileList)返回如下参数:

response服务器响应(上传成功以及文件信息,完整文件路径等信息)
file上传的文件信息
fileList上传的文件列表信息

我们使用阿里云的OSS存储服务,需要先获取sts授权,再调用OSS的上传API,所以这时候组件默认上传事件就不适用了,组件提供了 一个http-request参数,可以覆盖默认的方法,在选择文件后不自动上传,我们可以对图片进行操作、压缩等操作从而实现自定义上传

4、如何使用OSS sts授权登录

由于项目里使用的是阿里云的OSS sts授权登陆(什么是sts),通过自定义的规则,向服务器发送一个获取stsToken请求,请求通过后返回结果可以是JSON/xml,拿到里面的AccessKeyId、AccessKeySecret、SecurityToken参数

调用阿里云API主要核心代码如下:

// 调用后台接口返回过来的授权参数AccessKeyId、AccessKeySecret、SecurityToken
let client = new OSS({
    accessKeyId: data.AccessKeyId,
    accessKeySecret: data.AccessKeySecret,
    stsToken: data.SecurityToken,
    region: 'oss-cn-shenzhen', // oss地区
    bucket: '<OSS保存文件的文件名>'
})

// 拿到上传的文件
const f = this.file.raw

// 定义上传文件的名字+后缀
const storeAs = 'product/' + Date.parse(new Date()) + suffix

// 调用上传接口
client.multipartUpload(storeAs, f).then(function (response) {
    if (response.res.status === 200) {
       console.log('上传了')
    }
  }).catch(function (err) {
       console.error('error: ', err)
  })

storeAs是上传文件的名字,可以自定义,一般人会使用时间戳+后缀去定义。缺点是,如果在多线程下可能会出现重名的情况,所以推荐使用uuid+后缀的方式定义名字

Vue.js 和 Element UI 结合可以方便地构建用户界面,Element UI 的 `el-upload` 组件恰好提供了一个现成的解决方案来处理文件上传,包括阿里云 OSS(Object Storage Service)。以下是使用 `el-upload` 实现阿里云OSS文件上传的基本步骤: 1. **安装依赖**: 首先,在 Vue 项目中安装 `ali-oss` 和 `axios`,它们分别是阿里云OSS的官方客户端库和用于发送HTTP请求的库: ``` npm install ali-oss axios ``` 2. **配置阿里云OSS**: 在你的项目中创建一个 `.env` 或者使用配置文件,添加阿里云访问信息,如 Access Key、Secret Key 和 bucket名称等: ```ini # .env or config.js ALI_OSS_ACCESS_KEY_ID=your_access_key_id ALI_OSS_SECRET_ACCESS_KEY=your_secret_access_key ALI_OSS_BUCKET_NAME=your_bucket_name ``` 3. **初始化OSS实例**: 在你的 Vue 组件里,导入必要的库,并使用环境变量初始化一个 OSS 对象: ```javascript import OSS from 'ali-oss'; const ossClient = new OSS({ accessKeyId: process.env.ALI_OSS_ACCESS_KEY_ID, secretAccessKey: process.env.ALI_OSS_SECRET_ACCESS_KEY, endpoint: 'http://oss-cn-hangzhou.aliyuncs.com', // 使用你所在区域的endpoint }); ``` 4. **`el-upload` 组件配置**: 将 `el-upload` 组件设置好,监听 `onSuccess` 事件并处理上传后的回调: ```html <template> <el-upload :action="uploadUrl" :on-success="handleSuccess" :before-upload="beforeUpload" ref="upload" multiple > <i class="el-icon-upload"></i> Click to Upload </el-upload> </template> <script> export default { data() { return { uploadUrl: '', // 这里需要拼接完整的上传URL,比如ossClient.putFile方法的结果 // 其他可能用到的变量 }; }, methods: { handleSuccess(response, file) { console.log('文件 ' + file.name + ' 上传成功'); ossClient.signURL(file.name).then(url => this.uploadUrl = url); // 获取上传OSS的短链接 }, beforeUpload(file) { if (file.size > 1024 * 1024 * 5) { // 设置最大文件大小限制 message.error('File size exceeds the limit!'); return false; } return true; }, }, }; </script> ``` 5. **完整上传流程**: - 当用户选择文件后,组件会触发 `beforeUpload` 函数验证文件是否合法; - 如果合法,发起上传请求到 `uploadUrl`(通常由后端生成,这里仅作示例); - 文件上传成功后,`handleSuccess` 会被调用,获取上传成功的 URL 并更新到页面上。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值