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>
相关推荐
Eric.4615 分钟前
Wan‑Animate+MiniMax-H3 本地部署 AI 漫剧流水线:8G 显存动作迁移与动态分镜工程实战
前端·人工智能·comfyui·ai漫剧
库拉镜像AI牛牛2 小时前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
律宏阔2 小时前
Flutter 列表图片内存优化:CachedNetworkImage 与 ClipRRect 的取舍
前端·flutter
行者全栈架构师2 小时前
【鸿蒙心迹】相册文搜图工程化落地:HarmonyOS 7.0 端侧 AI 检索全链路实战与 5 个踩坑解法
前端
律宏阔2 小时前
Dart 3 Record:解决 Future.wait 异构返回值的类型问题
前端·flutter
Seraphina362 小时前
DVWA(XSS Reflected/Stored High,CSRF Low)
前端·xss·csrf
默_笙3 小时前
🍔 中间件不只是打日志:四个钩子、一次短路,和自带的工具
前端·javascript
程序员老赵4 小时前
Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台
运维·前端·后端
星禾元亨4 小时前
同一件事有三份资料,AI 该信哪一份?冲突判定、优先级链与处置流程
前端·人工智能
Dovis(誓平步青云)4 小时前
家里设备越来越多,如何用一张空间地图控制灯光和温度![
android·java·前端·javascript·人工智能·电脑