yml 配置
yml 配置
# ====================== ↓↓↓↓↓↓ MinIO文件服务器 ↓↓↓↓↓↓ ======================
minio:
url: http://114.67.110.190:9001
accessKey: minioadmin
secretKey: minioadmin
bucketName: zpf
maven:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.4</version>
</dependency>
属性文件:
package com.example.minio;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinIoProperties {
/** * minio地址+端口号 */
private String url;
/** * minio用户名 */
private String accessKey;
/** * minio密码 */
private String secretKey;
/** * 文件桶的名称 */
private String bucketName;
}
工具类:
package com.example.minio;
import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List;
@Slf4j
@Component
public class MinIoUtil {
@Autowired
MinIoProperties minIoProperties;
private static MinioClient minioClient;
/** * 初始化minio配置 * * @param : * @return: void * @date : 2020/8/16 20:56 */
@PostConstruct
public void init() {
try {
minioClient = new MinioClient(minIoProperties.getUrl(), minIoProperties.getAccessKey(),
minIoProperties.getSecretKey());
createBucket(minIoProperties.getBucketName());
} catch (Exception e) {
e.printStackTrace();
log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
}
}
/** * 判断 bucket是否存在 * * @param bucketName: * 桶名 * @return: boolean * @date : 2020/8/16 20:53 */
@SneakyThrows(Exception.class)
public static boolean bucketExists(String bucketName) {
return minioClient.bucketExists(bucketName);
}
/** * 创建 bucket * * @param bucketName: * 桶名 * @return: void * @date : 2020/8/16 20:53 */
@SneakyThrows(Exception.class)
public static void createBucket(String bucketName) {
boolean isExist = minioClient.bucketExists(bucketName);
if (!isExist) {
minioClient.makeBucket(bucketName);
}
}
/** * 获取全部bucket * * @param : * @return: java.util.List<io.minio.messages.Bucket> * @date : 2020/8/16 23:28 */
@SneakyThrows(Exception.class)
public static List<Bucket> getAllBuckets() {
return minioClient.listBuckets();
}
/** * 文件上传 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param filePath: * 文件路径 * @return: void * @date : 2020/8/16 20:53 */
@SneakyThrows(Exception.class)
public static void upload(String bucketName, String fileName, String filePath) {
minioClient.putObject(bucketName, fileName, filePath, null);
}
/** * 文件上传 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param stream: * 文件流 * @return: java.lang.String : 文件url地址 * @date : 2020/8/16 23:40 */
@SneakyThrows(Exception.class)
public static String upload(String bucketName, String fileName, InputStream stream) {
minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
return getFileUrl(bucketName, fileName);
}
/** * 文件上传 * * @param bucketName: * 桶名 * @param file: * 文件 * @return: java.lang.String : 文件url地址 * @date : 2020/8/16 23:40 */
@SneakyThrows(Exception.class)
public static String upload(String bucketName, MultipartFile file) {
final InputStream is = file.getInputStream();
final String fileName = file.getOriginalFilename();
minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
is.close();
return getFileUrl(bucketName, fileName);
}
/** * 删除文件 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @return: void * @date : 2020/8/16 20:53 */
@SneakyThrows(Exception.class)
public static void deleteFile(String bucketName, String fileName) {
minioClient.removeObject(bucketName, fileName);
}
/** * 下载文件 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param response: * @return: void * @date : 2020/8/17 0:34 */
@SneakyThrows(Exception.class)
public static void download(String bucketName, String fileName, HttpServletResponse response) {
// 获取对象的元数据
final ObjectStat stat = minioClient.statObject(bucketName, fileName);
response.setContentType(stat.contentType());
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
InputStream is = minioClient.getObject(bucketName, fileName);
IOUtils.copy(is, response.getOutputStream());
is.close();
}
/** * 获取minio文件的下载地址 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @return: java.lang.String * @date : 2020/8/16 22:07 */
@SneakyThrows(Exception.class)
public static String getFileUrl(String bucketName, String fileName) {
return minioClient.presignedGetObject(bucketName, fileName);
}
}
在开发中经常会用到的就是文件存储了,以前经常都是在服务器目录上映射一个目录用来存储文件,这个当然也没有问题,如果存储量不大的话。当然还有的会选择使用第三方存储比如七牛云、阿里云的oss云储存方案,自己搭建常用的可能会使用fastdfs或其他的,我接触minio后发现这个还是很不错,使用简单,支持多种语言SDK开发起来特别方便,多的就不说了,赶快上车了解下。
文档地址:minio相关文档
docker快速安装单机版:(默认你已经安装了docker环境,不清楚先了解docker安装使用再来吧!)
GNU/Linux 和 macOS
docker run -p 9000:9000 --name minio1 \
-v /mnt/data:/data \
-v /mnt/config:/root/.minio \
minio/minio server /data
指定密钥:
docker run -p 9000:9000 --name minio1 \
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
-v /mnt/data:/data \
-v /mnt/config:/root/.minio \
minio/minio server /data
Windows
docker run -p 9000:9000 --name minio1 \
-v D:\data:/data \
-v D:\minio\config:/root/.minio \
minio/minio server /data
指定密钥:
docker run -p 9000:9000 --name minio1 \
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
-v D:\data:/data \
-v D:\minio\config:/root/.minio \
minio/minio server /data
特别提醒:(-v 映射路径一定要是绝对路径,不然启动会报错)
启动成功后访问浏览器:http://localhost:{port} 进行访问,不指定key和secret默认都是minioadmin,访问后进入登陆页面,输入key和secret即可登陆,登陆成功页面如下:
接下来点击红色按钮创建一个存储桶,即可上传文件,比如创建一个test
ok至此已经搭建完成了,就是这么简单就搭建好了一个简单的云存储系统了。
总结: 通过简单操作,搭建了好了,minio默认提供了管理页面,使用起来方便不要开发都可以直接使用,所以还是觉得很不错的。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_43842093/article/details/121872168
内容来源于网络,如有侵权,请联系作者删除!