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

java使用MinIO,虚拟机时间异常

使用docker进行环境部署和启动

docker pull minio/miniodocker run -d -p 9000:9000 -p 9001:9001 \-e "MINIO_ROOT_USER=minio" \-e "MINIO_ROOT_PASSWORD=minio123" \-v /opt/minio/data:/data \-v /opt/minio/config:/root/.minio \minio/minio server --console-address ":9001" /data

部署自带管理界面 访问 http://192.168.85.143:9000 Access Key为minio Secret_key为minio123 进入系统后可以看到主界面 创建一个桶 添加名称 上传完成后可以通过地址+桶名+文件名访问

项目集成MinIO

添加依赖

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>7.1.2</version>
</dependency>

配置读取类

@Data
@ConfigurationProperties(prefix = "minio")
public class MinIOProperties {private String endpoint;//minio地址private String accessKey;//用户名private String secretKey;//密码private String bucketName;//桶名
}

添加配置

spring:servlet:multipart:max-file-size: 20MBmax-request-size: 21MBminio:endpoint: http://192.168.85.143:9000 #minio地址accessKey: minio #用户名secretKey: minio123 #密码bucketName: nini #桶名

配置类

@Configuration
@EnableConfigurationProperties(MinIOProperties.class)
public class MinIOConfig {@Beanpublic MinioClient minioClient(MinIOProperties minIOProperties){MinioClient minioClient = new MinioClient(minIOProperties.getEndpoint(), minIOProperties.getAccessKey(), minIOProperties.getSecretKey());return minioClient;}
}

模板类

@Component
public class MinIOTemplate {@Autowiredprivate MinioClient minioClient;@Autowiredprivate MinIOProperties properties;/*** 上传文件* @param file* @return*/public String upload(MultipartFile file) {// 原文件名String originalFilename = file.getOriginalFilename();// 获取文件的后缀String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));// 构造新的文件名,名字不重复String objectName = UUID.randomUUID().toString() + suffix;// 上传文件try {PutObjectArgs putObjectArgs = PutObjectArgs.builder().contentType(file.getContentType()).stream(file.getInputStream(), file.getSize(), -1).bucket(properties.getBucketName()).object(objectName).build();minioClient.putObject(putObjectArgs);} catch (Exception e) {throw new RuntimeException("上传文件失败: " + e.getMessage());}return properties.getEndpoint() + "/" + properties.getBucketName() + "/" + objectName;}/*** 上传文件* @param name* @param inputStream* @param contentType* @return*/public String upload(String name, InputStream inputStream, String contentType){// 上传文件try {PutObjectArgs putObjectArgs = PutObjectArgs.builder().contentType(contentType).stream(inputStream, inputStream.available(), -1).bucket(properties.getBucketName()).object(name).build();minioClient.putObject(putObjectArgs);} catch (Exception e) {throw new RuntimeException("上传文件失败: " + e.getMessage());}return properties.getEndpoint() + "/" + properties.getBucketName() + "/" + name;}/*** 删除文件* @param url*/public void delete(String url){String objectName = url.replace(properties.getEndpoint()+"/","").replace(properties.getBucketName()+"/","");RemoveObjectArgs args = RemoveObjectArgs.builder().bucket(properties.getBucketName()).object(objectName).build();try {minioClient.removeObject(args);} catch (Exception e) {throw new RuntimeException("删除文件失败: " + e.getMessage());}}/*** 下载文件* @param url* @return*/public InputStream download(String url){String objectName = url.replace(properties.getEndpoint()+"/","").replace(properties.getBucketName()+"/","");GetObjectArgs args = GetObjectArgs.builder().bucket(properties.getBucketName()).object(objectName).build();InputStream inputStream = null;try {inputStream = minioClient.getObject(args);} catch (Exception e) {throw new RuntimeException("下载文件失败: " + e.getMessage());}return inputStream;}
}

上传文件失败报错

如果报以下错误:The difference between the request time and the server's time is too large.

原因是:linux服务器时区的问题(因为虚拟机挂起后,时间也就停了)

解决方案:进行时间同步

1、查看系统时间、硬件时间

date // 查看系统时间
hwclock // 查看硬件时间

2、 安装ntpdate工具

yum -y install ntp ntpdate

3、 设置系统时间与网络时间同步

ntpdate cn.pool.ntp.org

4、将系统时间写入硬件时间

hwclock --systohc

http://www.xdnf.cn/news/4946.html

相关文章:

  • 低秩适应(LoRA)与量化LoRA(QLoRA)技术解析
  • ‌CDGP|数据治理:探索企业数据有序与安全的解决之道
  • Web 自动化之 HTML JavaScript 详解
  • OpenCV-Python (官方)中文教程(部分一)_Day22
  • 云服务如何简化物联网设备生命周期(How Cloud Services Simplify IoT Device Lifecycles)?
  • 摄像头模组AF、OIS模组
  • 接口-DAO模式
  • 65.微服务保姆教程 (八) 微服务开发与治理实战
  • 车载网络TOP20核心概念科普
  • Go使用Gin写一个对MySQL的增删改查服务
  • JS 问号(?)运算符避免中间报错
  • VNC windows连接ubuntu桌面
  • 涨薪技术|0到1学会性能测试第52课-Tomcat调优技术
  • 从回调到 Promise:异步编程进化史
  • 数据库(MySQL)基础
  • 【Python】Python项目中的依赖与配置:requirements.txt、setup.py、pyproject.toml 详解
  • git cola如何选择指定的多个commit同时合并到另外一个分支上
  • vscode与keil的乱码不兼容问题
  • 3.2.3 掌握RDD转换算子 - 3. 扁平映射算子 - flatMap()
  • matlab稳定求解高精度二维对流扩散方程
  • ​​​​​​​MySQL数据库故障排查指南
  • springboot+vue实现在线网盘(云盘)系统
  • Open CASCADE学习|Geom2d_Curve类
  • c语言if else语句格式(非常详细)
  • 管道符_+xargs拓展参数传递操作,以及find指令
  • 真相与幻象的博弈:AI“幻觉”的生成密码与治理革命
  • 稀疏数组在组合优化中的典型应用场景
  • 数据透视表控件DHTMLX Pivot v2.1发布,新增HTML 模板、增强样式等多个功能
  • 快速上手知识图谱开源库AmpliGraph教程指南(二)
  • 深入探索 JavaScript 中的模块对象