当前位置:   article > 正文

SpringBoot项目实现文件上传,MINIO+OSS阿里云

SpringBoot项目实现文件上传,MINIO+OSS阿里云

MINIO 安装以及部署

官网:MinIO | Code and downloads to create high performance object storage

下载后是一个minio.exe的文件,可以先创一个文件夹来存放数据以及文件

在文件的目录下cmd进入控制台

minio.exe server data

启动成功后控制台会打印账号密码

访问地址:http://127.0.0.1:9000,输入账号密码登录页面

创建桶

解读一下:

bucket name:bucket名字。
versioning: 版本控制允许在同一个键下保留同一个对象的多个版本。
object locking:对象锁定防止对象被删除。需要支持保留和合法持有。只能在创建桶时启用。
quota:配额用于限制桶内的数据量。
retention:保留是指在一段时间内防止对象删除的规则。为了设置桶保留策略,必须启用版本控制。

文件上传测试

Spring使用minio

在官网下找到最新的依赖包

添加依赖后,在yml文件下配置相关配置

添加minio的配置文件,注意:@Value的注解导入是spring的原生注解

  1. @Data
  2. @Configuration
  3. @ConfigurationProperties(prefix = "minio")
  4. public class MinioConfig {
  5. @Value("${minio.endpoint}")
  6. private String endpoint;
  7. @Value("${minio.access-key}")
  8. private String accessKey;
  9. @Value("${minio.secret-key}")
  10. private String secretKey;
  11. @Value("${minio.bucket-name}")
  12. private String bucketName;
  13. @Bean
  14. public MinioClient minioClient(){
  15. return MinioClient.builder().endpoint(endpoint).credentials(accessKey,secretKey).build();
  16. }
  17. }

创建工具类,实现文件上传

  1. /**
  2. * 上传文件到指定的存储桶中
  3. *
  4. * @param bucketName 存储桶名称
  5. * @param file 上传的文件
  6. * @param objectName 存储对象的名称
  7. * @param contentType 文件的内容类型
  8. * @return 文件上传的响应对象
  9. * @throws Exception 如果上传过程中发生异常
  10. */
  11. @SneakyThrows(Exception.class)
  12. public ObjectWriteResponse uploadFile(String bucketName, MultipartFile file, String objectName, String contentType) {
  13. InputStream inputStream = file.getInputStream();
  14. return minioClient.putObject(
  15. PutObjectArgs.builder()
  16. .bucket(bucketName)
  17. .object(objectName)
  18. .contentType(contentType)
  19. .stream(inputStream, inputStream.available(), -1)
  20. .build());
  21. }

controller层实现接口调用

  1. @PostMapping("/upload")
  2. public String upload(@RequestParam("file") MultipartFile file) {
  3. try {
  4. System.out.println(123);
  5. //文件名
  6. String fileName = file.getOriginalFilename();
  7. String newFileName = System.currentTimeMillis() + "." + StringUtils.substringAfterLast(fileName, ".");
  8. //类型
  9. String contentType = file.getContentType();
  10. minioTemplate.uploadFile(minioConfig.getBucketName(), file, newFileName, contentType);
  11. return "上传成功";
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. log.error("上传失败");
  15. return "上传失败";
  16. }
  17. }

postman测试结果

Spring实现阿里云OSS文件上传

创建Bucket时需要记录Endpoint访问节点

再在管理创建用户拿到对应的ID以及Secret

在yml文件中配置相对应的配置

创建OSS配置文件以及工具类

  1. @Service
  2. public class FileServiceImpl implements FileService {
  3. @Autowired
  4. private OSSConfig ossConfig;
  5. private Logger log;
  6. @Override
  7. public String upload(MultipartFile file) {
  8. //获取相关配置
  9. String bucketName = ossConfig.getBucketName();
  10. String endPoint = ossConfig.getEndPoint();
  11. String accessKeyId = ossConfig.getAccessKeyId();
  12. String accessKeySecret = ossConfig.getAccessKeySecret();
  13. //创建OSS对象
  14. OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
  15. //获取原生文件名
  16. String originalFilename = file.getOriginalFilename();
  17. //JDK8的日期格式
  18. LocalDateTime time = LocalDateTime.now();
  19. DateTimeFormatter dft = DateTimeFormatter.ofPattern("yyyy/MM/dd");
  20. //拼装OSS上存储的路径
  21. String folder = dft.format(time);
  22. String fileName = generateUUID();
  23. String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
  24. //在OSS上bucket下的文件名
  25. String uploadFileName = "user/" + folder + "/" + fileName + extension;
  26. try {
  27. PutObjectResult result = ossClient.putObject(bucketName, uploadFileName, file.getInputStream());
  28. //拼装返回路径
  29. if (result != null) {
  30. return "https://"+bucketName+"."+endPoint+"/"+uploadFileName;
  31. }
  32. } catch (IOException e) {
  33. log.error("文件上传失败:{}",e.getMessage());
  34. } finally {
  35. //OSS关闭服务,不然会造成OOM
  36. ossClient.shutdown();
  37. }
  38. return null;
  39. }
  40. /**
  41. * 获取随机字符串
  42. * @return
  43. */
  44. private String generateUUID() {
  45. return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);
  46. }
  47. }

OSSconfig

  1. @ConfigurationProperties(prefix = "aliyun.oss")
  2. @Configuration
  3. @Data
  4. public class OSSConfig {
  5. private String endPoint;
  6. private String accessKeyId;
  7. private String accessKeySecret;
  8. private String bucketName;
  9. }

Controller层进行测试

  1. @PostMapping("/upload")
  2. public Map<String , Object> uploadFile(@RequestPart("file") MultipartFile file) {
  3. String FileStr = fileService.upload(file);
  4. return buildResult(FileStr);
  5. }

测试结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/145356?site
推荐阅读
相关标签
  

闽ICP备14008679号