小工具知识网

当前位置: 首页 > 行业知识 > 前端使用el-upload实现单个图片直接上传阿里云OSS

行业知识

前端使用el-upload实现单个图片直接上传阿里云OSS

2026-11-03 07:59:57 来源:互联网转载

一、完整代码

1、vue组件

                        import { ref, reactive } from "vue";import { Plus } from "@element-plus/icons-vue";import * as OSS from "@/utils/oss.js"; // 引入oss.jsconst imageUrl = ref(); // 存储图片url值// 上传图片之前的回调function beforeUploadImage(file) {  console.log(file);  /*    file: {      uid 实际上就是时间戳      lastModified 最后修改时间,时间戳;      lastModifiedDate:最后修改时间,日期格式;      name 文件名称,如:"girl.png";      size 文件大小,如:59402, 单位字节B;      type 文件类型,如:"image/jpeg";    }  */  const isJPEG = file.name.split(".")[1] === "jpeg"; // 判断是否为 .jepg文件  const isJPG = file.name.split(".")[1] === "jpg"; // 判断是否为 .jpg文件  const isPNG = file.name.split(".")[1] === "png"; // 判断是否为 .png文件  const isLt20MB = file.size / 1024 / 1024  {      console.log("上传成功", res); // 打印查看输出结果      imageUrl.value = res.url; // 给页面组件绑定返回值的url    })    .catch((error)=>{      console.log('发生错误', error);    });}.avatar-uploader .avatar {  width: 178px;  height: 178px;  display: block;}.avatar-uploader .el-upload {  border: 1px dashed var(--el-border-color);  border-radius: 6px;  cursor: pointer;  position: relative;  overflow: hidden;  transition: var(--el-transition-duration-fast);}.avatar-uploader .el-upload:hover {  border-color: var(--el-color-primary);}.el-icon.avatar-uploader-icon {  font-size: 28px;  color: #8c939d;  width: 178px;  height: 178px;  text-align: center;}

2、oss.js文件 

const OSS = require('ali-oss'); // 引入ali-oss依赖export function client() {      const client = new OSS({        region: '填写Bucket所在地域',        accessKeyId: '阿里云账号的ID',        accessKeySecret: '阿里云账号的Secret',        bucket: '上传到的bucket名称'    })      return client}

二、实现过程

1、安装依赖

前端上传图片至OSS需要用到ali-oss插件,先安装ali-oss依赖

npm install ali-oss --save

 2、创建oss.js文件

在src下创建utils文件夹,里面新建oss.js文件,用来实例化自己的oss client;

const OSS = require('ali-oss'); // 引入ali-oss依赖export function client() {      const client = new OSS({        region: '填写Bucket所在地域',        accessKeyId: '阿里云账号的ID',        accessKeySecret: '阿里云账号的Secret',        bucket: '上传到的bucket名称'    })      return client}

在相应的组件中引入oss.js文件;

import * as OSS from "@/utils/oss.js";  // 引入oss.js

3、添加上传组件 

页面组件添加element-plus中的上传头像组件el-upload;

                        import { ref, reactive } from "vue";import { Plus } from "@element-plus/icons-vue";import * as OSS from "@/utils/oss.js"; // 引入oss.jsconst imageUrl = ref(); // 存储图片url值// 上传图片之前的回调function beforeUploadImage(file) {}// 上传图片的回调函数function uploadImage(file) {}.avatar-uploader .avatar {  width: 178px;  height: 178px;  display: block;}.avatar-uploader .el-upload {  border: 1px dashed var(--el-border-color);  border-radius: 6px;  cursor: pointer;  position: relative;  overflow: hidden;  transition: var(--el-transition-duration-fast);}.avatar-uploader .el-upload:hover {  border-color: var(--el-color-primary);}.el-icon.avatar-uploader-icon {  font-size: 28px;  color: #8c939d;  width: 178px;  height: 178px;  text-align: center;}

效果如下图所示:

 

4、上传图片的回调

// 上传图片回调function uploadImage(file) {  const dir = "zyldevices/";  const fileName = `${dir}device-${file.file.name}`; //定义唯一的文件名  OSS.client()    .put(fileName, file.file)    .then((res) => {      console.log("上传成功", res);      deviceForm.value.DeviceImageUrl = res.url;    })    .catch((error)=>{      console.log('发生错误', error);    });}

至此,我们已经可以完成上传功能了!

我们可以在页面中看到图片上传组件,点击可选择本地图片,进行上传;

可以看到我们的图片已经成功上传,将返回的url赋值给imageUrl即可显示图片;

在OSS控制台中也可以看到已上传的图片;

5、上传之前的校验 

在图片上传之前,可以校验文件类型是否正确,图片大小是否满足要求等;

// 上传图片之前的回调function beforeUploadImage(file) {  console.log(file);  /*    file: {      uid 实际上就是时间戳      lastModified 最后修改时间,时间戳;      lastModifiedDate:最后修改时间,日期格式;      name 文件名称,如:"girl.png";      size 文件大小,如:59402, 单位字节B;      type 文件类型,如:"image/jpeg";    }  */  const isJPEG = file.name.split(".")[1] === "jpeg"; // 判断是否为 .jepg文件  const isJPG = file.name.split(".")[1] === "jpg"; // 判断是否为 .jpg文件  const isPNG = file.name.split(".")[1] === "png"; // 判断是否为 .png文件  const isLt20MB = file.size / 1024 / 1024  

记录一下这个前端必不可少的功能!

每天进步一点点,今天的分享就到这里吧! 

上一篇:Stable-diffusion安装时Can‘t load tokenizer for ‘openai/clip-vit-large-patch14‘问题解决

下一篇:ps怎么做桃心?