1、首先安装minio的插件,因为我使用的vue3,不支持模块化的导入,所以我们使用一个别人写好的vue2的包
npm install --save minio-js
2、在需要上传文件的页面导入这个包
import { Minio } from "minio-js";
3、创建一个minio的客户端
minioClient = new Minio.Client({
endPoint: '192.168.1.111', // minio的ip,直接替换自己的即可
port: 9000, // 端口号,若地址为类似test.minio.***,就不必写端口号
useSSL: false, // 是否使用ssl
a***essKey: a***essKey, // 登录的a***essKey
secretKey: secretKey,
sessionToken: token,
});
这里说明一下,a***essKey、secretKey、sessionToken都是通过接口获取到的临时凭证
4、通过带预签名的url上传,首先我们需要获取到这个url,minioAPI提供了, minioClient.presignedPutObject可以获取带签名的URL
function uploadByUrl(url, data) {
loadding.value = true;
return fetch(url, {
mode: "cors", // 解决跨域
headers: {
A***ept: "application/json,text/plain,/",
},
method: "PUT",
body: data,//data就是文件对象
}).then((response) => {
if (response.ok) {
// 处理成功的情况
loadding.value = false;
proxy.$modal.msgSu***ess("上传成功");
} else {
// 处理失败的情况
proxy.$refs["my-upload"].clearFiles();
throw new Error("上传失败,请重新上传!");
}
});
}
//获取上传的URL
minioClient.presignedPutObject(
bucketName,//桶名称
fileName,//文件名称
1000 * 60 * 5,//URL有效期
function (err, presignedUrl) {//错误的回调方法
if (err) return console.log(err);
let url = presignedUrl;
uploadByUrl(url, fileObj.value);
}
);