- 安装minio
#docker 安装方法,环境centos7
1. docker search minio
2. docker pull minio/minio #安装最新版本的minio
3. docker pull minio/minio:tag #安装指定版本的minio
4. docker run -d -p 9000:9000 -p 9001:9001 -v /data1:/data1 -v /data2:/data2 -v /data3:/data3 -v /data4:/data4 -e MINIO_ROOT_USER=minioadmin -e MINIO_ROOT_PASSWORD=minioadmin minio/minio server /data1 /data2 /data3 /data4 --console-address ":9001"
#其中端口9000 为minio server暴露的端口,9001 为minio 控制台暴露的端口
创建bucket桶
- springboot集成minio
添加maven依赖
<!-- minio 依赖 -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.5</version>
</dependency>
<!-- okhttp依赖 -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
</dependency>
配置application.properties
minio.url=http://你的IP:9000
minio.accessKey=minioadmin
minio.secretKey=minioadmin
minio.bucket=test
向spring容器中注入bean
@Data
@Configuration
public class MinIoConfig {
@Value("${minio.url}")
private String url;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Value("${minio.bucket}")
private String bucketNameImage ;
@Bean
public MinioClient minioClient(){
MinioClient minioClient = MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).region("china").build();
return minioClient;
}
}
编写服务类
@Slf4j
@Component
public class MinIoServiceImpl implements MinIoService {
@Autowired
private MinIoConfig minioConfig;
@Autowired
private MinioClient minioClient;
//获取列表
@Override
public List<String> listObjects() {
List<String> list=new ArrayList<>();
try {
ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder()
.bucket(minioConfig.getBucketNameImage())
.build();
Iterable<Result<Item>> results =minioClient.listObjects(listObjectsArgs);
for (Result<Item> result : results) {
Item item = result.get();
log.info(item.lastModified() + ", " + item.size() + ", " + item.objectName());
list.add(item.objectName());
}
}catch (Exception e){
log.error("错误:"+e.getMessage());
}
return list;
}
//删除
@Override
public void deleteObject(String objectName) {
try {
RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder()
.bucket(minioConfig.getBucketNameImage())
.object(objectName)
.build();
minioClient.removeObject(removeObjectArgs);
}catch (Exception e){
log.error("错误:"+e.getMessage());
}
}
//上传
@Override
public void uploadObject(InputStream is,String fileName,String contentType) {
try {
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.bucket(minioConfig.getBucketNameImage())
.object(fileName)
.contentType(contentType)
.stream(is, is.available(), -1)
.build();
minioClient.putObject(putObjectArgs);
is.close();
}catch (Exception e){
log.error("错误:"+e.getMessage());
}
}
@Override
public String uploadObject(String bucketName, MultipartFile file) {
final InputStream is;
try {
is = file.getInputStream();
final String fileName = file.getOriginalFilename();
minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).stream(is,is.available(), -1).object("image/"+fileName).build());
is.close();
return getObjectUrl(fileName);
} catch (Exception e) {
log.error("错误:"+e.getMessage());
e.printStackTrace();
}
return null;
}
/**
* 获取minio文件的下载地址
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @return: java.lang.String
* @date : 2020/8/16 22:07
*/
public String getFileUrl(String bucketName, String fileName) {
try {
return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(fileName).build());
} catch (Exception e) {
log.error("错误:"+e.getMessage());
e.printStackTrace();
}
return null;
}
//获取minio中地址
@Override
public String getObjectUrl(String objectName){
try {
GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(minioConfig.getBucketNameImage())
.object(objectName)
.expiry(7, TimeUnit.DAYS)
.build();
return minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
}catch (Exception e){
e.printStackTrace();
log.error("错误:"+e.getMessage());
}
return "";
}
//下载minio服务的文件
@Override
public InputStream getObject(String objectName){
try {
GetObjectArgs getObjectArgs = GetObjectArgs.builder()
.bucket(minioConfig.getBucketNameImage())
.object(objectName)
.build();
return minioClient.getObject(getObjectArgs);
}catch (Exception e){
log.error("错误:"+e.getMessage());
}
return null;
}
@Override
public void createBucket(String bucketName) {
try {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} catch (Exception e){
log.error("错误:"+e.getMessage());
}
}
}