范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

对象存储服务minio

  1、安装服务器端
  网址:https://min.io/download#/linuxwget https://dl.min.io/server/minio/release/linux-amd64/minio
  指定账号密码export MINIO_ROOT_USER=admin export MINIO_ROOT_PASSWORD=admin123
  启动命令nohup /usr/local/minio/minio server --console-address ":9001"  /usr/local/minio/data > /usr/local/minio/log/minio.log 2>&1 &
  或者export MINIO_ACCESS_KEY=username export MINIO_SECRET_KEY=password nohup /usr/local/minio/minio server --address=0.0.0.0:9000 --console-address ":9001" --config-dir /usr/local/minio/config /usr/local/minio/data > /usr/local/minio/log/minio.log 2>&1 &
  登录管理页面IP+9001
  设置开机启动1.打开开机自启文件 vim /etc/rc.local 2.添加自启脚本 nohup /usr/local/minio server /home/minio/data > /home/minio/data/minio.log 2>&1 & 3.修改权限 chmod +x /etc/rc.local
  2、SpringBoot整合MinIO
  2.1、导入 minio jar包           	  io.minio           minio           7.1.0       
  2.2、配置
  application.yml 配置    minio:       endpoint: 172.0.0.1       port: 9000       accessKey: minio       secretKey: miniopassword       secure: false       bucketName: "my-bucket"       configDir: "/usr/local/minio/data/"
  类配置    /**      * minio配置      */      public static class Minio{     	/**     	* minio地址     	*/     	public static String Url="http://127.0.0.1:9000";     	/**     	* AK     	*/     	public static String AccessKey="minio";     	/**     	* SK     	*/     	public static String SecretKey="miniopassword";     	/**     	 * 文件夹      	 */     	public static String BuckeName="my-buckeName";      }
  3、实现    package com.minio.config;           import io.minio.MinioClient;     import io.minio.errors.InvalidEndpointException;     import io.minio.errors.InvalidPortException;     import io.swagger.annotations.ApiModelProperty;     import lombok.Data;     import org.checkerframework.checker.units.qual.A;     import org.springframework.boot.context.properties.ConfigurationProperties;     import org.springframework.context.annotation.Bean;     import org.springframework.stereotype.Component;     @Data     @Component     @ConfigurationProperties(prefix = "minio")     public class MinioConfig {         @ApiModelProperty("endPoint是一个URL,域名,IPv4或者IPv6地址")         private String endpoint;         @ApiModelProperty("TCP/IP端口号")         private int port;         @ApiModelProperty("accessKey类似于用户ID,用于唯一标识你的账户")         private String accessKey;         @ApiModelProperty("secretKey是你账户的密码")         private String secretKey;         @ApiModelProperty("如果是true,则用的是https而不是http,默认值是true")         private Boolean secure;         @ApiModelProperty("默认存储桶")         private String bucketName;         @ApiModelProperty("配置目录")         private String configDir;         @Bean         public MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException {             MinioClient minioClient = new MinioClient(endpoint, port, accessKey, secretKey,secure);             return minioClient;         }     }    package com.hope.minio.utils;           import io.minio.MinioClient;     import io.minio.ObjectStat;     import io.minio.PutObjectOptions;     import io.minio.Result;     import io.minio.errors.ErrorResponseException;     import io.minio.errors.InvalidExpiresRangeException;     import io.minio.messages.Bucket;     import io.minio.messages.DeleteError;     import io.minio.messages.Item;     import lombok.SneakyThrows;     import org.apache.commons.lang3.StringUtils;     import org.springframework.beans.factory.annotation.Autowired;     import org.springframework.stereotype.Component;     import org.springframework.web.multipart.MultipartFile;     import javax.servlet.ServletOutputStream;     import javax.servlet.http.HttpServletResponse;     import java.io.InputStream;     import java.nio.charset.StandardCharsets;     import java.util.ArrayList;     import java.util.List;     /**      * @PackageName: com.hope.minio.utils      * @ClassName: MinioUtil      * @Author Hope      * @Date 2020/7/27 11:43      * @Description: TODO      */     @Component     public class MinioUtil {         @Autowired         private MinioClient minioClient;         private static final int DEFAULT_EXPIRY_TIME = 7 * 24 * 3600;         /**          * 检查存储桶是否存在          *          * @param bucketName 存储桶名称          * @return          */         @SneakyThrows         public boolean bucketExists(String bucketName) {             boolean flag = false;             flag = minioClient.bucketExists(bucketName);             if (flag) {                 return true;             }             return false;         }          * 创建存储桶         public boolean makeBucket(String bucketName) {             boolean flag = bucketExists(bucketName);             if (!flag) {                 minioClient.makeBucket(bucketName);             } else {                 return false;          * 列出所有存储桶名称         public List listBucketNames() {             List bucketList = listBuckets();             List bucketListName = new ArrayList<>();             for (Bucket bucket : bucketList) {                 bucketListName.add(bucket.name());             return bucketListName;          * 列出所有存储桶         public List listBuckets() {             return minioClient.listBuckets();          * 删除存储桶         public boolean removeBucket(String bucketName) {                 Iterable> myObjects = listObjects(bucketName);                 for (Result result : myObjects) {                     Item item = result.get();                     // 有对象文件,则删除失败                     if (item.size() > 0) {                         return false;                     }                 }                 // 删除存储桶,注意,只有存储桶为空时才能删除成功。                 minioClient.removeBucket(bucketName);                 flag = bucketExists(bucketName);                 if (!flag) {                     return true;          * 列出存储桶中的所有对象名称         public List listObjectNames(String bucketName) {             List listObjectNames = new ArrayList<>();                     listObjectNames.add(item.objectName());             return listObjectNames;          * 列出存储桶中的所有对象         public Iterable> listObjects(String bucketName) {                 return minioClient.listObjects(bucketName);             return null;          * 通过文件上传到对象          * @param objectName 存储桶里的对象名称          * @param fileName   File name         public boolean putObject(String bucketName, String objectName, String fileName) {                 minioClient.putObject(bucketName, objectName, fileName, null);                 ObjectStat statObject = statObject(bucketName, objectName);                 if (statObject != null && statObject.length() > 0) {          * 文件上传          * @param bucketName          * @param multipartFile         public void putObject(String bucketName, MultipartFile multipartFile, String filename) {             PutObjectOptions putObjectOptions = new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);             putObjectOptions.setContentType(multipartFile.getContentType());             minioClient.putObject(bucketName, filename, multipartFile.getInputStream(), putObjectOptions);          * 通过InputStream上传对象          * @param stream     要上传的流         public boolean putObject(String bucketName, String objectName, InputStream stream) {                 minioClient.putObject(bucketName, objectName, stream, new PutObjectOptions(stream.available(), -1));          * 以流的形式获取一个文件对象         public InputStream getObject(String bucketName, String objectName) {                     InputStream stream = minioClient.getObject(bucketName, objectName);                     return stream;          * 以流的形式获取一个文件对象(断点下载)          * @param offset     起始字节的位置          * @param length     要读取的长度 (可选,如果无值则代表读到文件结尾)         public InputStream getObject(String bucketName, String objectName, long offset, Long length) {                     InputStream stream = minioClient.getObject(bucketName, objectName, offset, length);          * 下载并将文件保存到本地         public boolean getObject(String bucketName, String objectName, String fileName) {                     minioClient.getObject(bucketName, objectName, fileName);          * 删除一个对象         public boolean removeObject(String bucketName, String objectName) {                 minioClient.removeObject(bucketName, objectName);          * 删除指定桶的多个文件对象,返回删除错误的对象列表,全部删除成功,返回空列表          * @param bucketName  存储桶名称          * @param objectNames 含有要删除的多个object名称的迭代器对象         public List removeObject(String bucketName, List objectNames) {             List deleteErrorNames = new ArrayList<>();                 Iterable> results = minioClient.removeObjects(bucketName, objectNames);                 for (Result result : results) {                     DeleteError error = result.get();                     deleteErrorNames.add(error.objectName());             return deleteErrorNames;          * 生成一个给HTTP GET请求用的presigned URL。          * 浏览器/移动端的客户端可以用这个URL进行下载,即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天。          * @param expires    失效时间(以秒为单位),默认是7天,不得大于七天         public String presignedGetObject(String bucketName, String objectName, Integer expires) {             String url = "";                 if (expires < 1 || expires > DEFAULT_EXPIRY_TIME) {                     throw new InvalidExpiresRangeException(expires,                             "expires must be in range of 1 to " + DEFAULT_EXPIRY_TIME);                 url = minioClient.presignedGetObject(bucketName, objectName, expires);             return url;          * 生成一个给HTTP PUT请求用的presigned URL。          * 浏览器/移动端的客户端可以用这个URL进行上传,即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天。         public String presignedPutObject(String bucketName, String objectName, Integer expires) {                 url = minioClient.presignedPutObject(bucketName, objectName, expires);          * 获取对象的元数据         public ObjectStat statObject(String bucketName, String objectName) {                 ObjectStat statObject = minioClient.statObject(bucketName, objectName);                 return statObject;          * 文件访问路径         public String getObjectUrl(String bucketName, String objectName) {                 url = minioClient.getObjectUrl(bucketName, objectName);         public void downloadFile(String bucketName, String fileName, String originalName, HttpServletResponse response) {             try {                 InputStream file = minioClient.getObject(bucketName, fileName);                 String filename = new String(fileName.getBytes("ISO8859-1"), StandardCharsets.UTF_8);                 if (StringUtils.isNotEmpty(originalName)) {                     fileName = originalName;                 response.setHeader("Content-Disposition", "attachment;filename=" + filename);                 ServletOutputStream servletOutputStream = response.getOutputStream();                 int len;                 byte[] buffer = new byte[1024];                 while ((len = file.read(buffer)) > 0) {                     servletOutputStream.write(buffer, 0, len);                 servletOutputStream.flush();                 file.close();                 servletOutputStream.close();             } catch (ErrorResponseException e) {                 e.printStackTrace();             } catch (Exception e) {     }

3000元价位没对手,6000元旗舰也不怵,这3款手机闭眼买就行旗舰手机的使用体验好,这是众所周知的,不过价格也是真的香,很多朋友正是由于价格原因,对旗舰手机望而却步,一直无法体验到旗舰手机的绝妙之处。现在很大一部分人的月收入也就只有3000元特斯拉中国分别上调Model3和ModelY后轮驱动版售价1万2。1万元IT之家12月31日消息,特斯拉中国官网显示,Model3后轮驱动版价格调整为26。5652万元,与此前售价相比上调1万元ModelY后轮驱动版价格调整为30。1840万元,与此前上线两年用户破两亿,腾讯会议还能做什么?记者崔鹏腾讯会议诞生于2019年12月底,上线不久便遭遇疫情突袭,赶上了在线会议的发展大势。它是腾讯内部用户量破亿最快的产品,两年过去,腾讯会议的用户数更是再悄然间突破2亿。而腾讯房价翻倍涨,生育率不能翻倍降?房价最大的敌人是5G?年轻人不容易。要挣钱,钱难挣。企业跟人一样,要生存就要有利润,没有利润,干一年亏一年,早晚关门。企业关门,员工下岗,还不起贷款,一家老小喝西北风。中国人民只是暂时脱离了温饱,还不到A4打印不用墨盒碳粉,喵喵机家用学习打印机F1到底如何?身边不少家长都有为孩子学习购买了打印机这样的外设,平时打印试题或是手工作业确实是刚需,通常购买的家用打印机一般是喷墨打印机或激光打印机,这两者各有一些优缺点,喷墨打印机一般都支持彩新能源和传统燃油车怎样选车?随着国标社会对碳达峰,碳中和的理念不断深入,低碳出行成为眼前最为紧迫的选择。以特斯拉,比亚迪为代表的新能源汽车技术不断成熟。市面上涌现出以三元锂电池和磷酸铁锂电池为主。各有优势和缺台积电高管说出实情,没有EUV光刻机,也有可能造出5nm芯片台积电和三星,为何能造出5nm,甚至3nm芯片,相信很多人会不约而同的想到EUV光刻机。台积电和三星获得了ASML超过70的高端EUV光刻机,也正是因为如此,有很多人认为,要想造出SpringBoot中对于超卖现象的问题分析和解决方案本文只针对单体应用的高并发导致超卖的处理方案。超卖是指商品本来只有固定的数量比如10个,但是在某一时刻有大量的并发请求涌入,导致商品卖出去了比如100个,这就是超卖现象。本文以7种NFT通往元宇宙,还是走向大骗局?来源人民网原创稿当NFT遇上艺术品,一张图片一首歌一段视频,甚至一个头像都可以与一串代码擦出火花,身价发生几何倍数暴涨,突破现实世界认知。NFT全称为NonFungibleToke线下为王OPPORenovivoS系列机型盘点回顾随着互联网的兴起,大家的购物习惯产生了深刻的变化,网购似乎成为了绝大多数年轻人的首选,包括手机这样的数码产品也不例外。但现实情况其实是线下市场的手机销量仍然占手机市场总体销量的7成土耳其里拉暴跌,苹果捂着不卖了(观察者网讯)近日,随着土耳其货币大幅贬值,有外媒在23日24日陆续报道称,苹果公司暂停了在土耳其的线上产品销售。随后,又有消息称,土耳其的苹果线下零售店也把顾客拒之门外。人们在土
王思聪花100万组装的电脑,真的很牛吗?近日一位科技博主发布视频,记录了其受邀帮助王思聪组装电脑的经历。视频中王思聪组装的这台电脑预计花费100万元,具体配置是CPUEPYC7763两颗服务器主板机箱DellR7525内想转行学编程,选Java好还是Python好?这两年来IT教育发展迅速,编程语言随着发展也日益月异,比较火的Python语言发展迅速,与传统使用的Java语言来说,火爆程度差不多。有不少同学都想转行学编程,但也有同学疑惑,Py互联网大厂顶级程序员有哪些?到底有多厉害?大部分走技术路线的同学,在如今可以说都是希望进入互联网大厂搏一番天地的。因为这些国内顶尖企业,汇集了最前端的技术和最多的人才,给人发挥的平台和空间也是最大的。也就有同学好奇,各个互2021世界500强揭晓!京东居然排在阿里前面就在今天,财富杂志PlusApp全球同步发布了最新的财富世界500强企业排行榜。排行榜显示,沃尔玛连续第8年成为全球最大公司,中国的国家电网公司上升至第二位,亚马逊首次进入前三,苹备战2022秋招季,怎样才能拿到一份优秀实习offer?7月至10月是一年一度的火热秋招季,对于应届生来说秋招是开启求职之路的第一步,也是叩开名企大门的绝佳机会。大部分公司会在秋招季完成80以上的岗位招聘,剩余的岗位才会通过春招及社招等互联网大厂奇葩程序员面试题,看完我都惊了No。1牛重1000kg,桥承重能力900kg,如何才能让牛过桥?前些日子,这道华为招聘面试题处处刷屏,奇葩解法层出不穷。有人说大道至简,牛会游泳,让牛游过去就行了。也有人提出绑上年薪80万,嫌3千房租贵当代年轻人,该省省该花花开局一张图,大家就知道又是互联网人在凡尔赛了。前些日子有人在脉脉上感慨,互联网人怎么这么奇怪,一边拿着七八十万年薪嫌自己工资是白菜价,一边抱怨3000块钱租房房租贵。所谓的白菜价,BOSS直聘无条件取消大小周,互联网大厂纷纷加入反内卷?8月17日,BOSS直聘宣布将从2021年9月1日起取消大小周,并表示恢复双休后,员工薪资中的周末加班费仍正常发出,薪资总额不变。在BOSS直聘的薪资结构中,周末加班费部分约占员工源自字节跳动的web前端开发者调查报告!前端人必看今天,字节跳动技术团队公布了一份现代Web开发者的问卷调查报告。数据来自于字节跳动开源项目Modern。js的现代Web开发者问卷调查,参与者基本是一线前端开发工作者,对于前端开发2022春夏流行色是什么?色彩权威机构Pantone发布众所周知,PANTONE(潘通)是全球最权威的色彩机构,在过去50年中,它用产品服务与技术启发了众多专业设计师,成为色彩的全球标准语言只要你说出一个颜色的潘通色号,全世界就都能明白9月程序员平均工资出炉,这也太高了吧9月程序员工资出炉,这次的数据好像又有了新变化,我们一起来看看吧。2021年9月全国招收程序员435501人,仍然是一个非常大的体量。金九银十正是招聘旺季,程序员的岗位流动应该也是