minioClient
2021/11/6 6:11:59
本文主要是介绍minioClient,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
// 上传文件需要的配置 const Minio = require('minio'); const stream = require('stream'); // 你的minio配置信息 const minioClient = new Minio.Client({ endPoint: 'hh-cdn.honghusaas.com', // port: 9000, useSSL: true, accessKey: 'AKDD00000000000V2WKKZ5VIJLIVGA ', secretKey: 'ASDDBAbiztyNYRZcgriAmCjpyMGDwZxJWujwhUWS', }); // base64转blob export function toBlob(base64Data) { let byteString = base64Data; if (base64Data.split(',')[0].indexOf('base64') >= 0) { byteString = atob(base64Data.split(',')[1]); // base64 解码 } else { byteString = unescape(base64Data.split(',')[1]); } // 获取文件类型 const mimeString = base64Data.split(';')[0].split(':')[1]; // mime类型 // ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区 // let arrayBuffer = new ArrayBuffer(byteString.length) // 创建缓冲数组 // let uintArr = new Uint8Array(arrayBuffer) // 创建视图 const uintArr = new Uint8Array(byteString.length); // 创建视图 for (let i = 0; i < byteString.length; i += 1) { uintArr[i] = byteString.charCodeAt(i); } // 生成blob const blob = new Blob([uintArr], { type: mimeString, }); // 使用 Blob 创建一个指向类型化数组的URL, URL.createObjectURL是new Blob文件的方法,可以生成一个普通的url,可以直接使用,比如用在img.src上 return blob; } /** * 上传文件 * @param {*} bucketName 桶名 * @param {*} info info为antd上传组件的info * @param {*} callback 回调函数,返回下载url */ export function uploadFile(bucketName, info, callback) { // 获取文件类型及大小 const fileName = info.file.name; const mineType = info.file.type; const fileSize = info.file.size; const fileUid = Date.now(); // 参数 const metadata = { 'content-type': mineType, 'content-length': fileSize, }; // 将文件转换为minio可接收的格式 const reader = new FileReader(); reader.readAsDataURL(info.file.originFileObj); reader.onloadend = (e) => { const dataurl = e.target.result; // base64转blob const blob = toBlob(dataurl); // blob转arrayBuffer const reader2 = new FileReader(); reader2.readAsArrayBuffer(blob); reader2.onload = (ex) => { // 定义流 const bufferStream = new stream.PassThrough(); // 将buffer写入 bufferStream.end(Buffer.from(ex.target.result)); // 上传 minioClient.putObject(bucketName, `banner/workbench-${fileUid}-${fileName}`, bufferStream, fileSize, metadata, (err) => { if (err == null) { // 获取可下载的url minioClient.presignedGetObject(bucketName, `banner/workbench-${fileUid}-${fileName}`, 24 * 60 * 60, (err1, presignedUrl) => { if (err1) return; // 将数据返回 callback(presignedUrl.split('?')[0]); }); } }); }; }; } // 先判断桶是否存在, 如果可确保桶已经存在,则直接调用upload方法 export function checkedAndUpload(bucketName, info, callback) { uploadFile(bucketName, info, callback); // minioClient.bucketExists(bucketName, (err) => { // if (err) { // minioClient.makeBucket(bucketName, 'workbench', (err1) => { // if (err1) { // console.error(`${info.file.name}文件上传失败`); // return; // } // uploadFile(bucketName, info, callback); // }); // } else { // uploadFile(bucketName, info, callback); // } // }); }
这篇关于minioClient的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-07fastcgi 是什么-icode9专业技术文章分享
- 2024-10-07fastcgi 的详细使用教程介绍-icode9专业技术文章分享
- 2024-10-07git如何更新单个文件到本地-icode9专业技术文章分享
- 2024-10-07如何使用ASM(Abstract Syntax Tree Manipulation)技术来修改第三方AAR依赖中的函数-icode9专业技术文章分享
- 2024-10-07Activity 跳转时间耗时很长怎么优化解决-icode9专业技术文章分享
- 2024-10-07Androud Toast 有哪些常用的第三方组件-icode9专业技术文章分享
- 2024-10-07在viewmodel中怎么使用 mmkv?-icode9专业技术文章分享
- 2024-10-07MMKV.defaultMMKV() 是单例模式吗?-icode9专业技术文章分享
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享