vue中使用ali-oss上传文件到阿里云上

1.使用 npm 安装ali-oss

javascript 复制代码
npm install ali-oss --save

2.写ali-oss.js

javascript 复制代码
// 引入ali-oss
let OSS = require('ali-oss')
let client = new OSS({
  region: 'oss-cn-xxx', // bucket所在的区域, 默认oss-cn-hangzhou
  secure: true, // secure: 配合region使用,如果指定了secure为true,则使用HTTPS访问
  accessKeyId: '', // 通过阿里云控制台创建的AccessKey
  accessKeySecret: '', // 通过阿里云控制台创建的AccessSecret
  bucket: 'xxxxx', // 通过控制台或PutBucket创建的bucket
})
export const put = async (ObjName, fileUrl) => {
  try {
    let result = await client.put(`${ObjName}`, fileUrl)
    // ObjName为文件名字,可以只写名字,就直接储存在 bucket 的根路径,如需放在文件夹下面直接在文件名前面加上文件夹名称
    return result
  } catch (e) {
    console.log(e)
  }
}

3.使用element ui的 upload 组件进行上传

javascript 复制代码
<template>
  <div>
   <el-upload
     class="upload-demo"
       action
       drag
       :http-request="handleUploadOss"
       :before-upload="beforeUploadOss"
     >
       <i class="el-icon-upload"></i>
       <div class="el-upload__text" v-loading="uploadLoading">将文件拖到此处,或<em>点击上传</em></div>
     </el-upload>
  </div>
</template>
<script>
import {put} from '@/utils/ali-oss'
export default {
data() {
    return {
    },
    methods: {
    beforeUploadOss(file) {
      // console.log(file)
      // 限制上传类型
      const fileExtensions = this.getFileName(file.name) === '.doc' || this.getFileName(file.name) === '.docx' || this.getFileName(file.name) ==='.pdf' || this.getFileName(file.name) ==='.xlsx' || this.getFileName(file.name) ==='.zip'
      //限制的上限为500Mb
      const maxSize = file.size / 1024 / 1024 < 500;
      if (!fileExtensions) {
        this.$message.error('上传文件类型只能是 .doc, .docx, .pdf 格式, .xlsx 格式, .zip 格式!');
      }
      if (!maxSize) {
        this.$message.error('上传文件大小不能超过 500MB!');
      }
      // return fileExtensions && max20M;
      return maxSize
    },
    getFileName(name){
       return name.substring(name.lastIndexOf('.'))
    },
    handleUploadOss(option) {
      let objName = option.file.name
      let fileName = moment().format('YYYY/MM/DD')
      this.uploadLoading = true
      put(`${fileName}/${objName}`, option.file).then(res => {
        console.log(res)
        if (res.res.statusCode === 200) {
          this.$message.success('上传成功')
        }else{
          this.$message.error('上传失败')
        }
      }).catch((err) => {
      })
    },
   } 
}

}
</script>
相关推荐
主机哥哥4 分钟前
2026年阿里云五种方案快速部署 OpenClaw(Clawdbot)详细教程
阿里云·云计算
局外人LZ15 分钟前
Uniapp脚手架项目搭建,uniapp+vue3+uView pro+vite+pinia+sass
前端·uni-app·sass
爱上妖精的尾巴44 分钟前
8-5 WPS JS宏 match、search、replace、split支持正则表达式的字符串函数
开发语言·前端·javascript·wps·jsa
翼龙云_cloud1 小时前
阿里云代理商: 如何选择适合自己的阿里云 ECS 配置?
服务器·阿里云·云计算
为什么不问问神奇的海螺呢丶1 小时前
n9e categraf redis监控配置
前端·redis·bootstrap
云飞云共享云桌面1 小时前
推荐一些适合10个SolidWorks设计共享算力的服务器硬件配置
运维·服务器·前端·数据库·人工智能
Liu.7741 小时前
vue开发h5项目
vue.js
刘联其2 小时前
.net也可以用Electron开发跨平台的桌面程序了
前端·javascript·electron
韩曙亮2 小时前
【jQuery】jQuery 选择器 ④ ( jQuery 筛选方法 | 方法分类场景 - 向下找后代、向上找祖先、同级找兄弟、范围限定查找 )
前端·javascript·jquery·jquery筛选方法
前端 贾公子2 小时前
Node.js 如何处理 ES6 模块
前端·node.js·es6