赞
踩
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.6</version>
</dependency>
如果出现报错:
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location
io.minio.S3Base.(S3Base.java:105)
The following method did not exist:okhttp3.RequestBody.create([BLokhttp3/MediaType,)Lokhttp3/RequestBody,
在application.yml种添加minio配置,注意yml文件的格式
minio:
config:
url: http://127.0.0.1:9005 #ip地址
accessKey: name # 账号
secretKey: password # 密码
secure: false #如果是true,则用的是https而不是http,默认值是true
bucketName: "studyphoto-oss" # 自己bucket桶的名字 相当于文件夹
//导包 import io.minio.MinioClient; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Data @Configuration @ConfigurationProperties(prefix = "minio.config") public class MinioConfig { /** * 服务地址 */ private String url; /** * 用户名 */ private String accessKey; /** * 密码 */ private String secretKey; /** * 存储桶名称 */ private String bucketName; @Bean public MinioClient getMinioClient() { return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build(); } }
为了方便开发,将minio的操作封装为一个工具类
//导包 import com.wedu.config.MinioConfig; import io.minio.MinioClient; import io.minio.PutObjectArgs; import io.minio.StatObjectArgs; import io.minio.errors.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; /** * */ @Component public class MinioUtils { /** * minio进行文件上传的注入工作 * @param minioConfig * @param client :用于与MinIO服务进行交互,执行对象的存储操作(文件的上传、下载、删除等) */ // 注入minio配置文件 @Autowired private MinioConfig minioConfig; // 注入minio client @Autowired private MinioClient client; /** * 文件上传minio * @param originalFilename * @param file * @return */ public String upload(String originalFilename, MultipartFile file) { String url=""; // 获取文件的扩展名 例如.jpg .doc String extname = originalFilename.substring(originalFilename.lastIndexOf(".")); // 构建文件上传相关信息 PutObjectArgs args = null; try { args = PutObjectArgs.builder()// 构建上传文件信息 .bucket(minioConfig.getBucketName())//设置桶名 .object(originalFilename)//设置文件名 .stream(file.getInputStream(), file.getSize(), -1)//设置上传流 .contentType(file.getContentType())//设置文件类型 .build(); // 将文件上传到minio服务器 client.putObject(args); } catch (Exception e){ e.printStackTrace(); } // 组装文件信息,返回前端 或者存入数据路 // 文件访问路径: http://127.0.0.1:9005/bucketName/objectName url = minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + originalFilename; return url; } /** * 判断文件是否存在 * @param originalFilename * @return true存在 */ public Boolean checkFileIsExist(String originalFilename) { try { client.statObject( StatObjectArgs.builder().bucket(minioConfig.getBucketName()).object(originalFilename).build() ); } catch (Exception e) { // e.printStackTrace(); return false; } return true; } /** * 获取文件访问路径 * @param originalFilename * @return */ public String getFileUrl(String originalFilename){ return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + originalFilename; } }
其余操作(文件删除等 )可参考这篇博客:Minio工具类
@Autowired private SysUserService sysUserService; /** * 上传头像 * @param file * @return 返回图片的访问路径 * @throws IOException */ @PostMapping("upload") public R upload(@RequestParam("file") MultipartFile file) throws IOException { SysUserEntity user = getUser();//获取当前登录用户 String url=sysUserService.uploadAvatar(file,user); return R.ok().put("url",url); }
/**
* 上传头像
* @param file
* @param user
* @return 返回图片的访问路径
*/
String uploadAvatar(MultipartFile file, SysUserEntity user);
注意一定要注入minio的工具类
@Autowired private MinioUtils minioUtils;//注入minio工具类 /** * 上传头像 * @param file * @param user * @return 返回图片的访问路径 */ @Override public String uploadAvatar(MultipartFile file, SysUserEntity user) { String url=""; try { // 获取文件真实名称 String originalFilename = file.getOriginalFilename(); // 判断文件是否已经存在 不存在才进行上传和存储数据库操作 if(!minioUtils.checkFileIsExist(originalFilename)){ url = minioUtils.upload(originalFilename, file); user.setAvatar(url);// 更新用户头像url地址 this.update(user);// 更新数据库中用户头像url地址 }else { url=minioUtils.getFileUrl(originalFilename); } } catch (Exception e) { // throw new ServerException("文件上传异常" + e.getCause().toString()); // try { // throw new ServerException("文件上传异常" + e.getCause().toString(),1,null); // } catch (ServerException ex) { // ex.printStackTrace(); // } } return url; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。