• Java别在使用普通的照片上传了,你可以使用开源的minio实现图片的上传,方便又简单


    目录

    前沿

    minio介绍

    使用步骤

    1.下载minio文件

    2.创建文件夹并上传minio文件

    3.操作如下指令

    ​编辑 4.访问

    5.创建存储桶

    6.设置

    ​编辑 7.测试图片上传

    8.Java程序的使用步骤

    1. 在pom中加入如下依赖

    2.在application.yml中加入如下配置并创建相关类

    minio服务自启动

    打开开机自启文件

     添加自启脚本

    修改权限 

    重启测试


    前沿

    做Java开发的小伙伴肯定遇到过这样的情景,我们在做某个需求的时候需要将图片上传到服务器。很多时候我们就是自己在服务器下面建立一个文件夹然后自己写程序(输入输出流)来实现文件的上传。当然了这种方式挺不错的,但是还有更好的方法吗?当然了,今天就来讲一下如何使用minio来实现这个需求。

    minio介绍

    MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议。

    使用步骤

    1.下载minio文件

    我是用的Linux服务器,你可以去这个连接下载所需要的minio文件

    2.创建文件夹并上传minio文件

    我在自己的/home下创建了一个minio文件又在minio下创建了data文件

    mkdir -p /home/minio/data

    然后将minio文件传到该文件下

    3.操作如下指令

     4.访问

    默认情况再minio的访问端口是9000,你可以通过http://ip地址:9000来访问,输入你上面设置的access和secret登录即可

     

     其实这个时候如果我们的minio服务在关机重启或者我们使用ctrl+C后是会关闭,那么如何设置自启动呢?就是说如何实现我们的Linux服务器启动的时候自启动我们的minio,请看最后一节哦。我们现将minio的使用步骤讲完。

    5.创建存储桶

    点击箭头所示的地方创建自己的存储桶即可,我之前已经创建过一个picbucket了

     

    6.设置

    点击箭头所示地方

    修改这个地方为public

     7.测试图片上传

    点击如图所示地方并点击upload测试即可

     

    至此我们就已经搭建好了我们服务商的minio,那么如何使用程序来实现图片的上传呢?

    8.Java程序的使用步骤

    1. 在pom中加入如下依赖

    1. <dependency>
    2. <groupId>io.miniogroupId>
    3. <artifactId>minioartifactId>
    4. <version>3.0.10version>
    5. dependency>

    2.在application.yml中加入如下配置并创建相关类

    1. # minio 文件存储配置信息
    2. minio:
    3. endpoint: http://192.168.150.138:9800
    4. accesskey: minioadmin
    5. secretKey: minioadmin
    6. bucket : picbucket
    1. @Data
    2. @Component
    3. @ConfigurationProperties(prefix = "minio")
    4. public class MinioProp {
    5. /**
    6. * 连接url
    7. */
    8. private String endpoint;
    9. /**
    10. * 用户名
    11. */
    12. private String accesskey;
    13. /**
    14. * 密码
    15. */
    16. private String secretKey;
    17. /**
    18. * 桶名称
    19. */
    20. private String bucket;
    21. }
    1. @Configuration
    2. @EnableConfigurationProperties(MinioProp.class)
    3. public class MinioConfig {
    4. @Autowired
    5. private MinioProp minioProp;
    6. /**
    7. * 获取 MinioClient
    8. *
    9. * @return
    10. * @throws InvalidPortException
    11. * @throws InvalidEndpointException
    12. */
    13. @Bean
    14. public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
    15. return new MinioClient(minioProp.getEndpoint(), minioProp.getAccesskey(), minioProp.getSecretKey());
    16. }
    17. }
    1. @Component
    2. public class MinioUtils {
    3. @Autowired
    4. private MinioClient client;
    5. /**
    6. * 创建bucket
    7. *
    8. * @param bucketName bucket名称
    9. */
    10. @SneakyThrows
    11. public void createBucket(String bucketName) {
    12. if (!client.bucketExists(bucketName)) {
    13. client.makeBucket(bucketName);
    14. }
    15. }
    16. /**
    17. * 上传文件
    18. *
    19. * @param file 文件
    20. * @return
    21. */
    22. public String uploadFile(MultipartFile file,MinioProp minioProp) throws Exception {
    23. // 判断上传文件是否为空
    24. if (null == file || 0 == file.getSize()) {
    25. throw new BizException(4000,"上传文件不能为空");
    26. }
    27. try {
    28. // 判断存储桶是否存在
    29. createBucket(minioProp.getBucket());
    30. // 文件名
    31. String originalFilename = file.getOriginalFilename();
    32. // 新的文件名 = 存储桶名称_时间戳+【10000-99999】随机数字.后缀名
    33. Random random = new Random();
    34. String fileName = minioProp.getBucket() + "_" + System.currentTimeMillis() +(random.nextInt(99999 - 10000) + 10000 + 1)+ originalFilename.substring(originalFilename.lastIndexOf("."));
    35. // 开始上传
    36. client.putObject(minioProp.getBucket(), fileName, file.getInputStream(), file.getContentType());
    37. return minioProp.getEndpoint() + "/" + minioProp.getBucket() + "/" + fileName;
    38. } catch (Exception e) {
    39. throw new BizException(4000,e.getMessage());
    40. }
    41. }
    42. }

    接下来编写自己的上传接口即可

    1. @ApiOperation("上传图片接口,目前是穿到我自己的虚拟机Linux上,返回图片地址")
    2. @PostMapping("upload-image.json")
    3. public PicInfoVO upload(String base64) {
    4. try {
    5. MultipartFile file = new Base64ToMultipartFileUtil(base64,"data:image/jpeg;base64");
    6. PicInfoVO vo = new PicInfoVO();
    7. String imageUrl = minioUtils.uploadFile(file, minioProp);
    8. vo.setImageUrl(imageUrl);
    9. return vo;
    10. } catch (Exception e) {
    11. throw new BizException(4000, e.getMessage());
    12. }
    13. }

     

     在网上找了一个base64字符串并测试如下,返回了图片的地址

     访问图片地址

    且服务器上也有了相应的图片

     

    好了,讲完了,谢谢你的观看哦。 

    minio服务自启动

    前面我们讲过可,当我们的Linux服务器关机重启或者我们使用ctrl+C退货minio服务的时候我们的minio服务是不会自己启动的。

    如何设置自启动,首先我们补充一点就是在我们的/home/minio/data下建立一个minio.log文件

    touch /home/minio/minio.log 用来记录我们的minio日志,当然了你放在哪里都行,我自己是放在这里的

    打开开机自启文件

    vi /etc/rc.local

     添加自启脚本

    添加完后一定要记得保存哦

    修改权限 

    chmod +x /etc/rc.local

    重启测试

    reboot

    然后访问http://ip地址:9800看是否可以

  • 相关阅读:
    git merge 和 git rebese的区别
    【软考 系统架构设计师】操作系统④ 文件管理
    Python数据分析-4
    操作系统作业第8章和第9章(个人重点题目笔记)
    ubuntu中执行一个c程序-编辑makefile文件执行make
    Mybatis-plus 自定义模板生成代码DTO、VO等
    【单片机毕业设计选题24009】-基于单片机的智能窗帘控制系统设计
    Vue3:proxy数据取值proxy[Target]取值
    八股文第十六天
    计算机毕业设计ssm基于疫情防控下社区管理平台my3tu系统+程序+源码+lw+远程部署
  • 原文地址:https://blog.csdn.net/qq_39746820/article/details/126133322