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: minioaccessKey: minioadminsecretKey: minioadminendpoint: 127.0.0.1port: 9000isHttps: falsebucket-name: self-safe     

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

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

try (InputStream inputStream = new FileInputStream(tempFile)) {// 上传文件到 MinIOlog.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();// 创建并配置SheetWriteSheet 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.mzph.cn/web/61977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac苹果电脑 java前后端开发环境及软件安装教程

本文记录我初次使用macOS系统&#xff0c;m4 mini安装开发软件及环境的全过程&#xff0c;希望能帮助到你&#xff0c;好用的请点赞评论收藏增加热度&#xff0c;让更多Mac小白轻松体验开发&#xff0c;20241129 …

dfs—acwing

题目一&#xff1a;排序数字 842. 排列数字 - AcWing题库 分析 考虑dfs&#xff0c;其实stl——next_permutation也可以 路径存储开一个数组&#xff0c;不能重复搜索&#xff0c;加一个标记数组 代码 #include<bits/stdc.h> using namespace std;int path[10]; int…

ISAAC SIM踩坑记录--添加第三方3D场景

ISAAC SIM仿真首先就是要有合适的3D场景&#xff0c;官方提供了一些场景&#xff0c;如果不能满足要求&#xff0c;那就只能自己建。 对于我这种不会3D建模的菜鸟&#xff0c;只能到网上下载了&#xff0c;sketchfab就是一个不错的平台&#xff0c;有不少免费资源可以下载。 …

人工智能_大模型091_大模型工作流001_使用工作流的原因_处理复杂问题_多轮自我反思优化ReAct_COT思维链---人工智能工作笔记0236

# 清理环境信息&#xff0c;与上课内容无关 import os os.environ["LANGCHAIN_PROJECT"] "" os.environ["LANGCHAIN_API_KEY"] "" os.environ["LANGCHAIN_ENDPOINT"] "" os.environ["LANGCHAIN_TRACING_V…

一文理解多模态大语言模型——下

作者&#xff1a;Sebastian Raschka 博士&#xff0c; 翻译&#xff1a;张晶&#xff0c;Linux Fundation APAC Open Source Evangelist 编者按&#xff1a;本文并不是逐字逐句翻译&#xff0c;而是以更有利于中文读者理解的目标&#xff0c;做了删减、重构和意译&#xff0c…

使用伪装IP地址和MAC地址进行Nmap扫描

使用伪装IP地址和MAC地址进行Nmap扫描 在某些网络设置中&#xff0c;攻击者可以使用伪装的IP地址甚至伪装的MAC地址进行系统扫描。这种扫描方式只有在可以保证捕获响应的情况下才有意义。如果从某个随机的网络尝试使用伪装的IP地址进行扫描&#xff0c;很可能无法接收到任何响…

k8s 之 Role-Based Access Control

在 Kubernetes 中&#xff0c;RBAC&#xff08;Role-Based Access Control&#xff09;是一个用来控制对 Kubernetes 资源访问的授权机制。它通过定义不同角色&#xff08;Role&#xff09;和这些角色可以访问的权限&#xff0c;确保只有被授权的用户或服务能够执行特定的操作。…

SpringBoot该怎么使用Neo4j - 优化篇

文章目录 前言实体工具使用 前言 上一篇中&#xff0c;我们的Cypher都用的是字符串&#xff0c;字符串拼接简单&#xff0c;但存在写错的风险&#xff0c;对于一些比较懒的开发者&#xff0c;甚至觉得之间写字符串还更自在快速&#xff0c;也确实&#xff0c;但如果在后期需要…

数据科学与大数据之间的区别

什么是数据科学&#xff1f; 数据科学是一个跨学科领域&#xff0c;它将统计学和计算方法相结合&#xff0c;旨在从数据中提取见解和知识。它涉及收集、处理、分析以及解读数据&#xff0c;以揭示可用于为决策过程提供依据并推动创新的模式、趋势和关系。 数据科学涵盖了广泛…

neo4j如何存储关于liquidity structure的层次和关联结构

在 Neo4j 中存储关于流动性结构&#xff08;liquidity structure&#xff09;的层次和关联结构非常适合&#xff0c;因为 Neo4j 是一个基于图的数据库&#xff0c;能够自然地建模和存储复杂的关系和层次结构。下面是如何在 Neo4j 中设计和实现这样的数据模型的详细步骤和示例。…

七牛云成功保存但无法显示和访问{“error“:“download token not specified“}

在使用七牛云存储图片时&#xff0c;前端通过链接访问图片时遇到错误&#xff1a; {"error":"download token not specified"} 具体表现为&#xff1a; 后端通过 access_key 和 secret_key 生成了上传和下载的 Token。前端将域名与 res.key 拼接后生成图…

智慧银行反欺诈大数据管控平台方案(四)

智慧银行反欺诈大数据管控平台的核心内容&#xff0c;是通过整合多维度、多层次的金融交易信息&#xff0c;利用先进的大数据分析、机器学习与人工智能算法&#xff0c;构建一个系统性、实时性和智能化的反欺诈管控网络&#xff0c;旨在提供全面、高效、精准的风险评估机制。该…

jmeter基础_打开1个jmeter脚本(.jmx文件)

课程大纲 方法1.菜单栏“打开” 菜单栏“文件” - “打开” &#xff08;或快捷键&#xff0c;mac为“⌘ O”&#xff09;&#xff0c;打开文件选择窗口 - 选择脚本文件&#xff0c;点击“open”&#xff0c;即可打开脚本。 方法2.工具栏“打开”图标 工具栏点击“打开”图标&…

STM32 BootLoader 刷新项目 (十三) Python上位机介绍

STM32 BootLoader 刷新项目 (十三) Python上位机介绍 大家好&#xff0c;这是我们STM32 BootLoader的最后一篇文章了&#xff0c;讲述用Python写的上位机&#xff0c;也更新了半年时间了&#xff0c;谢谢大家的支持&#xff0c;到目前为止&#xff0c;已经更新了12篇文章了&am…

ArUco识别定位原理

1. ArUco是什么 ArUco marker是一种汉明码方格图。它由一个宽的黑边和一个内部的二进制矩阵组成&#xff0c;黑色的边界有利于快速检测到图像&#xff0c;Marker ID是他的二进制矩阵编码&#xff0c;Marker size是图片的大小。黑色方块对应0&#xff0c;白色方块对应1&#xf…

每天五分钟机器学习:平行和重合

本文重点 在前面的课程中,我们学习了超平面分离定理,这里面有一个超平面的概念,那么本文学习下,什么情况下超平面是重合的,什么情况下超平面是平行的,这对后面我们学习支持向量机特别重要。 超平面的定义 超平面是指在n维空间中,余维度为1的子空间,即超平面是n维空间…

【学习总结|DAY011】Java数组、二维数组

一、数组概述 在Java编程中&#xff0c;数组是一种用于存储固定大小同类型元素的集合。它提供了随机访问元素的能力&#xff0c;使得处理大量数据变得更加高效。 二、一维数组 1. 定义与初始化 一维数组是最简单的数组形式&#xff0c;其定义方式如下&#xff1a; dataTyp…

Unity 基于Collider 组件在3D 物体表面放置3D 物体

实现 从鼠标点击的屏幕位置发送射线&#xff0c;以射线监测点击到的物体&#xff0c;根据点击物体的法线向量调整放置物体的位置及朝向。 Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, 100)) {obj.transform.…

uniapp页面不跳转问题!(使用uni.$u.route或者原生uni.navigateTo)页面跳转ios无效果(既不报错也不跳转页面)

1.问题描述: 通常使用添加事件来触发页面跳转都没问题,但是现在业务需求,在一个方法中自动去携带参数跳转到另外一个页面,android真机无问题,就ios一直无法跳转过去! 2.解决方法: 2.1 必须使用setTimeout来延迟跳转 2.2 setTimeout的延迟时间必须要大于300 不要问为什么…

递归 算法

递归、搜索与回溯算法 1. 汉诺塔2. 合并两个有序链表3. 反转链表4. 两两交换链表中的节点5. Pow&#xff08;x,n&#xff09;-快速幂 1. 汉诺塔 题目链接&#xff1a; 面试题 08.06. 汉诺塔问题 解题思路&#xff1a; 首先观察有一个、两个、三个盘子时的情况&#xff0c;手…