vue直传图片到阿里云OSS(单张直接上传)

背景:

近期项目使用到多图片上传功能,常规的调用后端接口上传,可能会出现上传速度慢,体验不佳的情况。那么就考虑另一种上传方式。由前端直接上传到oss。快的一匹。。。
经过摸索,也实现了。代码其实没啥难度,问题都出在阿里云这里,例如:跨域,读写权限等等,以及一个十分恶心的坑(竟然不能把目标文件夹写到配置参数里面,就很无语,百试不得,后来拼在了图片路径前面,达到了效果)

首先你得去阿里云开启一个对象存储oss服务:

还得去创建一个AccessKey

在这里插入图片描述
这两个是关键项
在这里插入图片描述

还得创建一个bucket,用于存放你的东西

在这里插入图片描述

这里面你可以创建文件夹,将图片指定到这个文件夹了,就不会杂乱的放在公共目录了,当然这个创建文件件的操作,最好是交给后端来做,在请求接口拿secretKey这些东西的时候,让后端一并返回。

在这里插入图片描述

读写权限打开:

改成公共读写

在这里插入图片描述

创建跨域规则

1,
在这里插入图片描述
2,
在这里插入图片描述
3,
在这里插入图片描述
4,规则如下:
在这里插入图片描述


以上已做好所有准备,可以去vue项目中编写上传相关代码了


安装ali-oss
npm install ali-oss
vue代码:

<template>
    <el-upload class="avatar-uploader" action="" v-model="Addfrom.url" :http-request="uploadURL"
    :multiple = true :before-upload="handleBeforeUpload" :limit="8">
      <img v-if="Addfrom.url" :src="Addfrom.url" class="avatar">
      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
    </el-upload>             
</template>
<script>
  import {client,	getFileNameUUID} from './alioss.js'
  export default {
    data() {
      return {
        fileList: [],
        Addfrom:{
          url:''
        }
      };
    },
    methods: {
      // 上传文件之前
			handleBeforeUpload(file) {
				const isJPEG = file.name.split('.')[1] === 'jpeg';
				const isJPG = file.name.split('.')[1] === 'jpg';
				const isPNG = file.name.split('.')[1] === 'png';
				const isWEBP = file.name.split('.')[1] === 'webp';
				const isGIF = file.name.split('.')[1] === 'gif';
				const isLt500K = file.size / 1024 / 1024 / 1024 / 1024 < 4;
				if (!isJPG && !isJPEG && !isPNG && !isWEBP && !isGIF) {
					this.$message.error('上传图片只能是 JPEG/JPG/PNG 格式!');
				}
				if (!isLt500K) {
					this.$message.error('单张图片大小不能超过 4mb!');
				}
				return (isJPEG || isJPG || isPNG || isWEBP || isGIF) && isLt500K;
			},
			uploadURL(file) {
				//注意哦,这里指定文件夹'image/',尝试过写在配置文件,但是各种不行,写在这里就可以
				var fileName = 'image/'+'banner' + `${Date.parse(new Date())}` + '.jpg'; 
				//定义唯一的文件名,打印出来的uid其实就是时间戳
				client().multipartUpload(fileName, file.file,{
                progress: function(percentage, cpt) {
                  console.log('打印进度',percentage)
                }
              }).then((res)=>{
          //此处赋值,是相当于上传成功之后,手动拼接服务器地址和文件名
          this.Addfrom.url = 'https://xxx-oss.oss-cn-beijing.aliyuncs.com/' + fileName;
        })
			},

    }
  }
</script>
alioss.js
// var OSS = require('ali-oss');
import OSS from "ali-oss";
export function client(){
  var client = new OSS({
      endpoint: 'oss-cn-beijing.aliyuncs.com',//填写Bucket所在地域
      accessKeyId: 'LTAxxxxxxxxxxxxxxxxxxxRAQn',
      accessKeySecret: 'NxexxxxxxxxxxxxxxxxxxxxxxGG2',
      bucket: 'zyp-oss',// 填写Bucket名称。
  })  //后端提供数据 
  return client
}
/**
 * 生成随机uuid
 */
export const getFileNameUUID = () => {
  function rx() {
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
  }
  return `${+new Date()}_${rx()}${rx()}`
}

页面效果:

点击选择文件

在这里插入图片描述

上传成功回显

在这里插入图片描述

看看oss中

在这里插入图片描述

两种上传方式的区别:

见阿里:添加链接描述

put:简单上传,不可使用进度条

在这里插入图片描述

MultipartUpload:分片上传

在这里插入图片描述

END
  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要使用Vue上传图片阿里云OSS,你需要进行以下步骤: 1. 在阿里云OSS上创建一个Bucket,并且获取到AccessKeyId、AccessKeySecret、Bucket名称和Endpoint。 2. 安装ali-ossvue-ali-oss插件,可以使用npm安装。 3. 在Vue组件中引入vue-ali-oss插件,并且在data中声明阿里云OSS的相关信息。 4. 编写上传图片的方法,使用ali-oss插件进行上传。 下面是一个简单的代码示例,可以供你参考: ``` <template> <div> <input type="file" @change="handleFileUpload"> </div> </template> <script> import OSS from 'ali-oss'; import VueAliOSS from 'vue-ali-oss'; export default { name: 'ImageUploader', data() { return { accessKeyId: 'your_access_key_id', accessKeySecret: 'your_access_key_secret', bucket: 'your_bucket_name', endpoint: 'your_endpoint', file: null }; }, methods: { handleFileUpload(event) { this.file = event.target.files[0]; const client = new OSS({ accessKeyId: this.accessKeyId, accessKeySecret: this.accessKeySecret, bucket: this.bucket, endpoint: this.endpoint }); client.put(this.file.name, this.file) .then(response => { console.log(response); // 在这里处理上传成功后的逻辑 }) .catch(error => { console.log(error); // 在这里处理上传失败后的逻辑 }); } }, mixins: [VueAliOSS] }; </script> ``` 在这个示例中,我们首先在data中声明了阿里云OSS的相关信息,然后在handleFileUpload方法中使用ali-oss插件进行上传。在上传成功后,我们可以在then回调函数中处理上传成功后的逻辑,在上传失败后,我们可以在catch回调函数中处理上传失败后的逻辑。 请注意,这只是一个简单的示例。在实际使用中,你需要根据自己的需求进行更多的配置和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小郑有点困了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值