目录
1.安装(linux)
1.1 下载
1.2 创建目录
1.3 赋予权限
1.4 指定端口号后台启动
2.访问
2.1创建桶
2.2修改权限
3.springboot整合minio
3.1上传文件
https://dl.min.io/server/minio/release/linux-amd64/minio
需要,可以先在本地下载,然后上传到服务器。
mkdir /opt/minio
mkdir /opt/minio/data
将下载好的minio文件上传到minio目录下。
进入miniomulu
chmod +x minio
nohup /opt/minio server --address 0.0.0.0:9000 /opt/minio/data > /opt/minio/minio.log 2>&1 &
如果用的是其他目录,则需要更改一下上面启动命令,将启动命令中的目录改为你自己的目录。
注意开启9000和9001端口号。
http://localhost:9000/
服务器ip+端口
账号密码都是:minioadmin
需要本地访问的话需要改为public,不然会没有权限查看上传文件
yml配置
# minio 参数配置
minio:
endpoint: http://xxx:9000
accessKey: minioadmin
secretKey: minioadmin
bucketName: test
逻辑
@Autowired
private MinIoClientConfig minIoClientConfig;
@Autowired
private MinioClient minioClient;
@Override
public DataResult uploadImg(MultipartFile file) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
String url=minIoClientConfig.getEndpoint();
String bucketName="test";
//获取文件名称
String originalFilename = file.getOriginalFilename();
//获取文件的类型
//使用当前时间重新生成文件名,防止文件名称重复造成文件覆盖
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String fileNewName = System.currentTimeMillis() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
String fileName = sdf.format(d) + "&&" + fileNewName;
//4.构建文件上传路径
String filePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//5.文件上传的路径
String uploadUrl=filePath+"/"+fileName;
//6.开始上传
InputStream inputStream=null;
try {
inputStream=file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.object(uploadUrl)
.contentType("image/jpeg")
.bucket(bucketName)
.stream(inputStream, inputStream.available(), -1)
.build();
minioClient.putObject(putObjectArgs);
return DataResult.success(url+"/"+bucketName+"/"+uploadUrl);
}
@PostMapping("/upload")
public DataResult uploadImg(MultipartFile file) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
if(file==null||file.isEmpty()||file.getSize()==0){
return DataResult.error(ResponseCode.FILE_IS_NOT_NULL.getMsg());
}
return userService.uploadImg(file);
}
之后调用接口的时候会直接返回一个路径,用那个路径就可以访问到自己上传的那个文件了。
代码中还有一个问题,就是我使用@Value来调用yml中已经配置好了的bucketName, 但是却调用不成功,所以我是直接在逻辑代码处赋值桶的名字的。