目录
2.在application.yml中加入如下配置并创建相关类
做Java开发的小伙伴肯定遇到过这样的情景,我们在做某个需求的时候需要将图片上传到服务器。很多时候我们就是自己在服务器下面建立一个文件夹然后自己写程序(输入输出流)来实现文件的上传。当然了这种方式挺不错的,但是还有更好的方法吗?当然了,今天就来讲一下如何使用minio来实现这个需求。
MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议。
我是用的Linux服务器,你可以去这个连接下载所需要的minio文件
我在自己的/home下创建了一个minio文件又在minio下创建了data文件
mkdir -p /home/minio/data
然后将minio文件传到该文件下
默认情况再minio的访问端口是9000,你可以通过http://ip地址:9000来访问,输入你上面设置的access和secret登录即可
其实这个时候如果我们的minio服务在关机重启或者我们使用ctrl+C后是会关闭,那么如何设置自启动呢?就是说如何实现我们的Linux服务器启动的时候自启动我们的minio,请看最后一节哦。我们现将minio的使用步骤讲完。
点击箭头所示的地方创建自己的存储桶即可,我之前已经创建过一个picbucket了
点击箭头所示地方
修改这个地方为public
点击如图所示地方并点击upload测试即可
至此我们就已经搭建好了我们服务商的minio,那么如何使用程序来实现图片的上传呢?
- <dependency>
- <groupId>io.miniogroupId>
- <artifactId>minioartifactId>
- <version>3.0.10version>
- dependency>
- # 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字符串并测试如下,返回了图片的地址
访问图片地址
且服务器上也有了相应的图片
好了,讲完了,谢谢你的观看哦。
前面我们讲过可,当我们的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看是否可以