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>
相关推荐
极客密码5 小时前
感谢雷总!Mimo大模型价值¥659/月的 MAX 套餐,让我免费领到了!
前端·ai编程·claude
深念Y6 小时前
我明白为什么B站没法在浏览器开直播了——Windows Chrome推流踩坑全记录
前端·chrome·webrtc·浏览器·srs·直播·flv
zhangxingchao6 小时前
AI应用开发七:可以替代 RAG 的技术
前端·人工智能·后端
Sun@happy6 小时前
现代 Web 前端渗透——基础篇(1)
前端·web安全
希冀1236 小时前
【CSS学习第十一篇】
前端·css·学习
隔窗听雨眠6 小时前
doctype、charset、meta如何控制整个渲染流水线
java·服务器·前端
kyriewen7 小时前
写组件文档写到吐?我用AI自动生成Storybook,同事以后直接抄
前端·javascript·面试
excel7 小时前
🧠 Prisma 表名大写 vs SQL 导出小写问题深度解析(附踩坑与解决方案)
前端·后端
周淳APP7 小时前
【前端工程化原理通识:从源头到运行时的理论阐述】
前端·编译·打包·前端工程化