说在前面的话
项目当中经常会遇到要上传什么东西,或者下载的问题.
所以OSS对象存储就这样诞生了,比如说阿里云的对象存储几块钱一个月.
但是有的公司因为要存的东西有点奇特,存放在这些云上可能第二天大家都要提桶跑路了.
所以能把这些东西放在一个自己认为安全的地方. 然后就是各种各样的文件存储系统就出现了.
minio是什么?
minio是一个分布式对象存储服务器,用GO语言编写
简单的说,这个和你用的阿里云的OSS差不多,都是调用SDK做文件对象的CRUD
你真的需要了解这个的原理嘛?
去淘宝买个东西,会有人会去专门去研究淘宝的架构原理,怎么玩中间件,数据怎么备份嘛?
怎么玩了? 当然下载安装就OK了
https://min.io/ 下载吧
正篇开始!
1,在项目的POM.xml里添加 maven依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
2,写一个工具类
public class OSSUtils {
protected static String url;
protected static String accessKey;
protected static String secretKey;
static {
secretKey = "YjyhNOyCRGNsgSMOPm+EIFuUuC2onlYFqaP16Bhr";
url = "http://127.0.0.1:9000";
accessKey = "UJU01UFAQJ3USV6CI74W";
}
// 通过流上传一个文件 MultipartFile 只要在controller接收就好,是前端发过来的,
// myBucketname 是文件存放在那个文件夹(桶)里面
// multipartFile.getOriginalFilename() 这个是文件的名字 .
public static String fileUploader(MultipartFile multipartFile, String myBucketname) throws DHException {
try {
MinioClient mc = MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
if (!mc.bucketExists(BucketExistsArgs.builder().bucket(myBucketname).build()))
mc.makeBucket(MakeBucketArgs.builder().bucket(myBucketname).build());
mc.putObject(
PutObjectArgs.builder().bucket(myBucketname).object(multipartFile.getOriginalFilename()).stream(
multipartFile.getInputStream(), multipartFile.getSize(), -1)
.contentType(multipartFile.getContentType())
.build());
return mc.statObject(StatObjectArgs.builder().
bucket(myBucketname).
object(multipartFile.getOriginalFilename()).build()).toString();
} catch (MinioException | NoSuchAlgorithmException | IOException | InvalidKeyException e) {
throw new DHException();
}
}
// 通过文件名 和 文件夹(桶) 名字删除一个对象
public static void deleteObject(String objectname, String myBucketname) throws DHException {
MinioClient minioClient = MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
try {
minioClient.removeObject(RemoveObjectArgs.builder().bucket(myBucketname).object(objectname).build());
} catch (Exception e) {
throw new DHException(LanguageResultCodeEnum.DELETE_OBJECT_ERROR.getMessage(), LanguageResultCodeEnum.DELETE_OBJECT_ERROR.getValue());
}
}
// 文件下载
public static void downloadFile(HttpServletResponse response, String objectname, String myBucketname) throws DHException {
try {
MinioClient minioClient = MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(myBucketname).object(objectname).build());
response.setHeader("Content-Disposition", "attachment;filename=" + objectname);
response.setContentType("application/force-download");
response.setCharacterEncoding("UTF-8");
IoUtil.copy(inputStream, response.getOutputStream());
} catch (Exception e) {
throw new DHException(LanguageResultCodeEnum.FILE_DOWNLOAD_ERROR.getMessage(), LanguageResultCodeEnum.FILE_DOWNLOAD_ERROR.getValue());
}
}
}
好了,这样就可以用了 . 是不是很完美!
也可以继续完善,或者直接调用你的工具类.
如果还有不懂的地方请加群解答.
967489688