vue框架-前端oss直传

vue

vue框架" title="vue框架">vue框架中使用oss直传,前端直接调oss接口,服务端直接将所有文件存在同一个目录下(提高效率),之所以网页上看到有文件夹的区分,是因为根据前端命名方式(一般是自定义文件夹名字加文件名字加时间搓)来制造有文件夹区分的效果,这个命名可以理解成是这个文件的唯一标识。传给后端的时候直接把这个命名传入即可。


1.在阿里云新建配置跨域规则(header嫌麻烦配置成*即可,如不配置会产生跨域问题)


2.引入SDK-js

<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-4.4.4.min.js"></script>

3.新建组件(我是基于vue-element组件)

3.1 如何上传

 const client = new OSS.Wrapper({

region: _this.region,

accessKeyId: '',//填入自己的id

accessKeySecret: '',//填入自己的id

bucket: _this.bucket

})

client.multipartUpload('重命名后的名字','文件内容',{上传进度回调})

3.2 如何浏览 (这里有个私有文件和公有文件的区别)

文档地址:https://help.aliyun.com/document_detail/64054.html?spm=a2c4g.11186623.6.771.HNKycx

私有图片拼接规则:

 var client = new OSS({ //这里是设置图片预览地址

region: _this.region,

accessKeyId: '',

accessKeySecret: '',

bucket: _this.bucket

});

var signUrl = client.signatureUrl(random_name, {expires: 6000, 'process' : 'image/resize,w_300'});

需要先去去获取权限(证明你有权限访问这张图片)

公有图片地址拼接规则:http://bucket.<endpoint>/object?x-oss-process=image/action,parame_value

<template>

<div class="page">

<div class="oss_file">

<input type="file" :id="id" @change="doUpload"/>

<div>

<p>

上传进度:{{percentage}}

{{percentage===1?"success!":(percentage===0?'waiting...':'uploading')}}

</p>

<div>

</div>

</div>

</template>

<script>

export default {

name: 'elOss',

data () {

return {

region: 'oss-cn-hangzhou',

bucket: '',//这里需要填入自己的bucket,申请完阿里云之后获得

id: 'upload',

baseurl:'',

percentage: 0,

url:'',

urls:[]

}

},

mounted() {

this.getbaseurl();

},

methods:{

getbaseurl(){ //文件夹命名

var date=new Date;

var year=date.getFullYear();

var month=date.getMonth()+1;

month =(month<10 ? "0"+month:month);

var mydate = date.getDate();

mydate =(mydate<10 ? "0"+mydate:mydate);

this.baseurl = 'img/'+year+'/'+year+month+'/'+year+month+mydate+'/';

},

btnclick(){

var btn = document.getElementById(this.id);

btn.click()

},

doUpload () {

const _this = this

const urls = [];

const client = new OSS.Wrapper({

region: _this.region,

accessKeyId: '',//填入自己的id

accessKeySecret: '',//填入自己的id

bucket: _this.bucket

})

_this.percentage = 0;

const files = document.getElementById(_this.id)

if (files.files) {

const fileLen = document.getElementById(_this.id).files;

var file = fileLen[0];

if(file) {

if (!file.type.match('image.*')) {

this.$message.error('请上传图片格式的文件');

return;

}

}

let resultUpload = ''

for (let i = 0; i < fileLen.length; i++) {

const file = fileLen[i]

// 随机命名

let random_name = this.baseurl+this.random_string(6) + '_' + new Date().getTime() + '.' + file.name.split('.').pop()

// 上传

client.multipartUpload(random_name, file, {

progress: function* (percentage, cpt) {

// 上传进度

_this.percentage = percentage

}

}).then((results) => {

// 上传完成

var client = new OSS({ //这里是设置图片预览地址

region: _this.region,

accessKeyId: '',

accessKeySecret: '',

bucket: _this.bucket

});

var signUrl = client.signatureUrl(random_name, {expires: 6000, 'process' : 'image/resize,w_300'});

console.log(signUrl)

}).catch((err) => {

this.$message.error(err);

})

}

}

},

// 随机生成文件名

random_string(len) {

len = len || 32;

var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';

var maxPos = chars.length;

var pwd = '';

for (let i = 0; i < len; i++) {

pwd += chars.charAt(Math.floor(Math.random() * maxPos));

}

return pwd;

}

},

watch:{

url(val){

if(val){

this.urls.push(val);

}

}

}

}

</script>


以上是 vue框架-前端oss直传 的全部内容, 来源链接: utcz.com/z/378163.html

回到顶部