vue项目使用阿里云oss上传图片或下载图片
1.封装上传和下载的方法
安装 ali-oss包
npm install ali-oss
新建 utils/oss.js:
然后在utils/oss.js写入代码:
- 1.导入ali-oss
import OSS from 'ali-oss'
- 2.配置信息
const region = "oss-cn-shanghai"
const accessKeyId = "xxxxx"
const accessKeySecret = "xxxxx"
const bucket = "xxxxx"
import { Message } from 'element-ui';
let client = new OSS({
region : region,
accessKeyId : accessKeyId,
accessKeySecret : accessKeySecret,
bucket : bucket
});
- 3.上传
const CooOss = function(file){
if(this instanceof CooOss){
let objectKey = file.lastModified+'_'+file.name;
return new Promise((resolve,reject) => {
client.multipartUpload(objectKey, file).then(result => {
resolve({
code : 0,
objectKey : objectKey,
url : this.getOssFileUrl(objectKey),
msg : "ok"
});
}).catch(err => {
console.error('上传出错了');
Message.error('上传出错了');
reject({code : -1 , url : "", objectKey : "", msg : "上传出错了"});
});
})
}
else{
return new CooOss(file);
}
};
CooOss.prototype.getOssFileUrl = obecjtKey => {
if(!obecjtKey) return new Error("object key 必须传");
return "https://" + bucket + "." + region + ".aliyuncs.com/" + obecjtKey;
}
- 4.下载
const downloadFile = function (key) {
console.log(key)
let url = client.signatureUrl(key);
let Img = new Image(), dataURL = '';
let fileName = key.substring(key.indexOf('_')+1);
Img.src = url;
Img.setAttribute("crossOrigin", 'Anonymous');
Img.onload = function () {
let canvas = document.createElement("canvas"),
width = Img.width,
height = Img.height;
canvas.width = width;
canvas.height = height;
canvas.getContext("2d").drawImage(Img, 0, 0, width, height);
dataURL = canvas.toDataURL('image/png' );
let eleLink = document.createElement('a');
eleLink.download = fileName;
eleLink.style.display = 'none';
eleLink.href = dataURL;
document.body.appendChild(eleLink);
eleLink.click();
document.body.removeChild(eleLink);
};
}
- 5.导出
export default {
install(Vue){
Vue.prototype.Oss = {
uploadFile : CooOss,
downloadFile : downloadFile
};
}
};
2.在main.js里引入
import Oss from './utils/oss'
Vue.use(Oss)
3.在需要的页面调用
// 调用上传
upload(file){ // 这个file是文件对象
this.Oss.uploadFile(file).then(res => {
console.log(res)
})
},
// 调用下载
downloadImg(key){ // 这个key是objectKey
this.Oss.downloadFile(key)
}
最后附上utils/oss.js完整代码
// 导入ali-oss
import OSS from 'ali-oss';
/**
* 配置信息
*/
const region = "oss-cn-shanghai"; // 换成自己的region
const accessKeyId = "xxxxx"; // 换成自己的accessKeyId
const accessKeySecret = "xxxxx"; // 换成自己的accessKeySecret
const bucket = "xxxxx"; // 换成自己的bucket
import { Message } from 'element-ui';
let client = new OSS({
region : region,
accessKeyId : accessKeyId,
accessKeySecret : accessKeySecret,
bucket : bucket
});
/**
*
* @param {上传是设置文件key , 一般为文件名称} objectKey
* @param {文件file} file
*/
// 上传
const CooOss = function(file){
if(this instanceof CooOss){
let objectKey = file.lastModified+'_'+file.name;
return new Promise((resolve,reject) => {
client.multipartUpload(objectKey, file).then(result => {
resolve({
code : 0,
objectKey : objectKey,
url : this.getOssFileUrl(objectKey),
msg : "ok"
});
}).catch(err => {
console.error('上传出错了');
Message.error('上传出错了');
reject({code : -1 , url : "", objectKey : "", msg : "上传出错了"});
});
})
}
else{
return new CooOss(file);
}
};
// 下载
const downloadFile = function (key) {
console.log(key)
let url = client.signatureUrl(key);
let Img = new Image(), dataURL = '';
let fileName = key.substring(key.indexOf('_')+1);
Img.src = url;
Img.setAttribute("crossOrigin", 'Anonymous');
Img.onload = function () {
let canvas = document.createElement("canvas"),
width = Img.width,
height = Img.height;
canvas.width = width;
canvas.height = height;
canvas.getContext("2d").drawImage(Img, 0, 0, width, height);
dataURL = canvas.toDataURL('image/png' );
let eleLink = document.createElement('a');
eleLink.download = fileName;
eleLink.style.display = 'none';
eleLink.href = dataURL;
document.body.appendChild(eleLink);
eleLink.click();
document.body.removeChild(eleLink);
};
}
/**
*
* @param {上传是设置文件key 一般是文件名} obecjtKey
*/
CooOss.prototype.getOssFileUrl = obecjtKey => {
if(!obecjtKey) return new Error("object key 必须传");
return "https://" + bucket + "." + region + ".aliyuncs.com/" + obecjtKey;
}
export default {
install(Vue){
Vue.prototype.Oss = {
uploadFile : CooOss,
downloadFile : downloadFile
};
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!