当前位置: 首页 > article >正文

Mac安装MINIO服务器实现本地上传和下载服务

0.MINIO学习文档

Minio客户端mc使用 | Elibaron学习笔记

1.Mac安装MINIO

中文官方网址:MinIO下载和安装 | 用于创建高性能对象存储的代码和下载内容

(1) brew 安装

brew install minio/stable/minio

(2)安装完成,执行brew info minio 

(3)启动minio服务

/opt/homebrew/opt/minio/bin/minio server --certs-dir\=/opt/homebrew/etc/minio/certs --address\=:9000 /opt/homebrew/var/minio

参数解释:

  • –certs-dir=/opt/homebrew/etc/minio/certs  配置文件目录
  • –address=:9000 使用的端口
  • /opt/homebrew/var/minio 存储数据目录 

Ctrl+c关闭服务器。

(4)启动成功。

  • 访问 http://127.0.0.1:9000 或者 http://127.0.0.1:52301
  • RootUser: minioadmin
  • RootPass: minioadmin

2. 利用本地MINIO实现文件上传功能

(1)首先先建一个Buckets

(2) 然后在nacos中配置你的oss-minio(这种方法比较通用)

oss:
  provider: 
    MINIO: 
      ossType: minio
      accessKey: minioadmin
      secretKey: minioadmin
      endpoint: 127.0.0.1
      port: 9000
      isHttps: false
      bucket-name: self-safe     

accessKey和secretKey可以在你登录minio的时候就会看到:

 你也可以在你代码里写死,但是这样不通用:

try (InputStream inputStream = new FileInputStream(tempFile)) {
            // 上传文件到 MinIO
            log.info("Uploading file to MinIO, fileName: {}", fileName);

            MinioClient minioClient = MinioClient.builder()
                    // MinIO 服务地址
                    .endpoint("http://localhost:9000")
                    // MinIO 访问密钥
                    .credentials("minioadmin", "minioadmin")
                    .build();

            minioClient.putObject(
                    PutObjectArgs.builder()
                            // 替换为你的 MinIO Bucket 名称
                            .bucket("self-safe")
                            // 上传的文件名
                            .object(fileName)
                            // 文件流和文件大小
                            .stream(inputStream, tempFile.length(), -1)
                            // 文件类型
                            .contentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
                            .build()
            );

(3)调用上传文件工具类ossUtils.uploadFile,文件就会被自动上传到你自己本地的minio了

UploadResult uploadResult = ossUtils.uploadFile(inputStream, exportExcelName + ".xlsx");

(4) 把数据写入excel并上传到minio总体代码

 private <T extends DamExcelWrite> void exportCustomerRiskMonitoring(
            String fileSid,
            Function<Integer, List<T>> exportFunction,
            Class<T> clazz,
            List<String> sheetNames,
            String exportExcelName
    ) {
        // 获取下载状态信息
        FileDownloadStatus fileStatus = fileDownloadStatusService.getDownloadStatusById(fileSid);
        DateTime processTime = DateUtil.date();
        DateTime expireTime = DateUtil.offsetDay(processTime, fileExpireTime);
        fileStatus.setExpireTime(expireTime);
        String fileName = exportExcelName + "-" + fileSid;
        File tempFile;
        try {
            tempFile = File.createTempFile(fileName, ExcelTypeEnum.XLSX.getValue());
        } catch (Exception e) {
            log.error("create file error, stop export, fileName: {}", fileName);
            return;
        }

        try (OutputStream outputStream = new FileOutputStream(tempFile)) {


            log.info("Starting to write Excel file");


            // 创建模板文件
            ExcelWriter excelWriter = EasyExcel.write(outputStream, clazz)
                    .inMemory(true)
                    .excelType(ExcelTypeEnum.XLSX)
                    .build();

            // 创建并配置Sheet
            WriteSheet writeSheet = EasyExcel.writerSheet(sheetNames.get(0)).head(clazz).build();

            // 分页写入数据
            int pageIndex = 1;
            while (true) {
                log.info("Fetching data for pageIndex: {}", pageIndex);
                List<T> pageData = exportFunction.apply(pageIndex);
                if (pageData == null || pageData.isEmpty()) {
                    log.warn("No data found for pageIndex: {}, ending write loop.", pageIndex);
                    break; // 数据为空,退出循环
                }
                log.info("Writing data for pageIndex: {}, data size: {}", pageIndex, pageData.size());
                excelWriter.write(pageData, writeSheet);
                pageIndex++;
            }

            log.info("Finishing ExcelWriter to finalize write operation.");
            excelWriter.finish();
        } catch (Exception e) {
            log.error("Error during Excel export, fileSid: {}", fileSid, e);
            fileStatus.setGenerateStatus("2");
            fileStatus.setMsg("Error during export: " + e.getMessage());
        }

        try (InputStream inputStream = new FileInputStream(tempFile)) {
            // 上传文件
            log.info("Starting upload for file: {}", fileName);
            long start = System.currentTimeMillis();

            // 将文件流上传
            UploadResult uploadResult = ossUtils.uploadFile(inputStream, sheetNames + ".xlsx");
            log.info("Upload finished, cost: {}, file: {}", System.currentTimeMillis() - start, fileName);

            // 更新文件状态为成功
            fileStatus.setGenerateStatus("1");
            fileStatus.setMsg("success");
            saveExportRecord("CustomerRiskMonitoringExport", fileSid, processTime, expireTime, uploadResult);
        } catch (Exception e) {
            log.error("Error during file upload, fileSid: {}", fileSid, e);
            fileStatus.setGenerateStatus("2");
            fileStatus.setMsg("Error during upload: " + e.getMessage());
        } finally {
            if (tempFile.exists()) {
                tempFile.delete();
            }
        }

        // 更新下载状态
        log.info("Updating fileDownloadStatus: {}", fileStatus);
        fileDownloadStatusService.updateDownloadStatus(fileStatus);
    }

(5)检查文件是否被上传成功,miniou会按照年月日分好文件夹


http://www.kler.cn/a/421205.html

相关文章:

  • 03-13、SpringCloud Alibaba第十三章,升级篇,服务降级、熔断和限流Sentinel
  • KAN-Transfomer——基于新型神经网络KAN的时间序列预测
  • 嵌入式硬件实战提升篇(三)商用量产电源设计方案 三路电源输入设计 电源管理 多输入供电自动管理 DCDC降压
  • 用三维模型的顶点法向量计算法线贴图
  • 12.2深度学习_项目实战
  • 营业执照 OCR 识别 API 的发展前景
  • springboot+mybatis对接使用postgresql中PostGIS地图坐标扩展类型字段
  • 认识Java数据类型和变量
  • Flutter:常见的页面布局:上边内容可滚动,底部固定一个按钮
  • 网工日记:VRRP-虚拟路由冗余协议
  • pyqt6简单应用
  • 健康养生生活
  • MagicAnimate 技术浅析(一)
  • 常用端口号总结
  • Python 网络爬虫的高级应用:反爬绕过与爬取多样化数据
  • python分析wireshark文件
  • QT:核心机制
  • 量化交易系统开发-实时行情自动化交易-8.3.开拓者TBQuant平台
  • 精通 Python 网络安全(二)
  • mysql数据库之三范式
  • week 10 - Database: Normalisation
  • win11 多任务 贴靠 bug:左右两窗口贴靠时拖动中间的对齐条后,资源管理器有概率卡死
  • 使用API管理Dynadot域名,设置默认域名服务器ip信息
  • Spring Boot Actuator未授权访问漏洞处理
  • 详解Vue设计模式
  • 基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战