• 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);
      //   }
      // });
    }
    
    
  • 相关阅读:
    【秋招必备】Redis面试题(2021最新版)
    【秋招必备】Spring Boot面试题(2021最新版)
    【秋招必备】Java基础知识面试题(2021最新版)
    用友二面:如何设计一个高可用、高并发秒杀系统
    万字长文,带你深入理解Java虚拟机!
    小米面试官:说说Spring源码里面的Bean的生命周期!
    苏宁易购三面:写一个脚本获取Linux系统CPU的详细信息,并说出原理!
    易错点。
    APP间传递消息
    KVC, KVO
  • 原文地址:https://www.cnblogs.com/superlizhao/p/15515789.html
Copyright © 2020-2023  润新知