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中加入如下依赖

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

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

# minio 文件存储配置信息
minio:
    endpoint: http://192.168.150.138:9800
    accesskey: minioadmin
    secretKey: minioadmin
    bucket : picbucket
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
    /**
     * 连接url
     */
    private String endpoint;
    /**
     * 用户名
     */
    private String accesskey;
    /**
     * 密码
     */
    private String secretKey;
    /**
     * 桶名称
     */
    private String bucket;
}
 
@Configuration
@EnableConfigurationProperties(MinioProp.class)
public class MinioConfig {
 
    @Autowired
    private MinioProp minioProp;
 
    /**
     * 获取 MinioClient
     *
     * @return
     * @throws InvalidPortException
     * @throws InvalidEndpointException
     */
    @Bean
    public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
        return new MinioClient(minioProp.getEndpoint(), minioProp.getAccesskey(), minioProp.getSecretKey());
    }
}
 
@Component
public class MinioUtils {
 
    @Autowired
    private MinioClient client;
 
    /**
     * 创建bucket
     *
     * @param bucketName bucket名称
     */
    @SneakyThrows
    public void createBucket(String bucketName) {
        if (!client.bucketExists(bucketName)) {
            client.makeBucket(bucketName);
        }
    }
 
    /**
     * 上传文件
     *
     * @param file       文件
     * @return
     */
    public String uploadFile(MultipartFile file,MinioProp minioProp) throws Exception {


        // 判断上传文件是否为空
        if (null == file || 0 == file.getSize()) {
           throw  new BizException(4000,"上传文件不能为空");
        }
        try {
	       	// 判断存储桶是否存在
	        createBucket(minioProp.getBucket());
	        // 文件名
	        String originalFilename = file.getOriginalFilename();
	        // 新的文件名 = 存储桶名称_时间戳+【10000-99999】随机数字.后缀名
            Random random = new Random();
	        String fileName = minioProp.getBucket() + "_" + System.currentTimeMillis() +(random.nextInt(99999 - 10000) + 10000 + 1)+ originalFilename.substring(originalFilename.lastIndexOf("."));
	        // 开始上传
	        client.putObject(minioProp.getBucket(), fileName, file.getInputStream(), file.getContentType());
            return minioProp.getEndpoint() + "/" + minioProp.getBucket() + "/" + fileName;
		}  catch (Exception e) {
            throw  new BizException(4000,e.getMessage());
        }

    }
}
 

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

    @ApiOperation("上传图片接口,目前是穿到我自己的虚拟机Linux上,返回图片地址")
    @PostMapping("upload-image.json")
    public PicInfoVO upload(String base64) {

        try {
            MultipartFile file = new Base64ToMultipartFileUtil(base64,"data:image/jpeg;base64");
            PicInfoVO vo = new PicInfoVO();
            String imageUrl = minioUtils.uploadFile(file, minioProp);
            vo.setImageUrl(imageUrl);
            return vo;
        } catch (Exception e) {
            throw new BizException(4000, e.getMessage());
        }

    }

 

 在网上找了一个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看是否可以

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢编程的夏先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值