基于Java写minio客户端实现上传下载文件

 更新时间:2020年05月18日 11:19:16   作者:帅过驴的袋鼠  
这篇文章主要介绍了基于Java写minio客户端实现上传下载文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言:

  确保已经安装了minio的服务端

代码:

pom.xml

<dependency>
  <groupId>io.minio</groupId>
  <artifactId>minio</artifactId>
  <version>7.0.2</version>
</dependency>

application.yml

server:
 port:90
minio:
 url: http://10.69.94.140:9000
 accessKey: 账号
 secretKey: 密码
 defaultFolder: /

MinioProperties.java

@ConfigurationProperties("minio")
@Data
public class MinioProperties {
  private String url;
  private String accessKey;
  private String secretKey;
  private String defaultFolder;
}

SpringConfig.java

@Configuration
@EnableConfigurationProperties(MinioProperties.class)
@Slf4j
public class SpringConfig {
  @Autowired
  private MinioProperties minioProperties;

  @Bean
  public MinioClient minioClient() {
    try {
      return new MinioClient(minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey());
    } catch (Exception e) {
      log.error(e.toString());
    }
    return null;
  }

}

ImagesController.java

@RestController
@RequestMapping("/image")
@Slf4j
@CrossOrigin(origins = "*")
public class ImageController {

  @Autowired
  private FileService fileService;

  /*******
   * Get image file, this method return an image type file which can be displayed in browser.
   * @param bucketName, system, each system should belong a special bucket.
   * @param category, a system may contain multiple category
   * @param fileName
   */
  @GetMapping(value = "/get/{bucketName}/{category}/{objectName}/{fileName}", produces = MediaType.IMAGE_JPEG_VALUE)
  public byte[] get(@PathVariable("bucketName") String bucketName, @PathVariable("category") String category,
           @PathVariable("objectName") String objectName,
           @PathVariable("fileName") String fileName) throws Exception {
    return fileService.getFile(bucketName, category, objectName);
  }

  @GetMapping("/download/{bucketName}/{category}/{objectName}/{fileName}")
  public void download(@PathVariable("bucketName") String bucketName, @PathVariable("category") String category,
             @PathVariable("objectName") String objectName,
             @PathVariable("fileName") String fileName, HttpServletResponse response) throws Exception {
    byte[] buffer = fileService.getFile(bucketName, category, objectName);
    response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
    response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + "\"");
    response.getOutputStream().write(buffer);
    response.flushBuffer();
    response.getOutputStream().close();
  }

  @PostMapping("/upload/{bucketName}/{category}")
  public String upload(@PathVariable("bucketName") String bucketName, @PathVariable("category") String category,
             @RequestParam("file") MultipartFile file) throws Exception {
    String objectName = UUID.randomUUID().toString();
    fileService.storeFile(bucketName, category, objectName, file.getBytes());
    return String.format("image/get/%s/%s/%s/%s", bucketName, category, objectName, file.getOriginalFilename());
  }
}

FilesController.java

@RestController
@RequestMapping("/files")
@Slf4j
@CrossOrigin(origins = "*")
public class FilesController {

  @Autowired
  private FileService fileService;

  @GetMapping("/download/{bucketName}/{category}/{objectName}/{fileName}")
  public void download(@PathVariable("bucketName") String bucketName, @PathVariable("category") String category,
             @PathVariable("objectName") String objectName, @PathVariable("fileName") String fileName, HttpServletResponse response) throws Exception {
    byte[] buffer = fileService.getFile(bucketName, category, objectName);
    response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
    response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + "\"");
    response.getOutputStream().write(buffer);
    response.flushBuffer();
    response.getOutputStream().close();
  }

  @PostMapping("/upload/{bucketName}/{category}")
  public String upload(@PathVariable("bucketName") String bucketName, @PathVariable("category") String category,
             @RequestParam("file") MultipartFile file) throws Exception {
    String objectName = UUID.randomUUID().toString();
    fileService.storeFile(bucketName, category, objectName, file.getBytes());
    return String.format("files/download/%s/%s/%s/%s", bucketName, category, objectName, file.getOriginalFilename());
  }
}

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Upload file test</title>
</head>
<body>
  <form action="http://localhost:90/image/upload/zeng/test" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="Submit">
  </form>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java实现Html转Pdf的方法

    Java实现Html转Pdf的方法

    这篇文章主要介绍了Java实现Html转Pdf的方法,实例分析了java基于ITextRenderer类操作页面及系统自带字体生成pdf文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • SpringCloud可视化链路追踪系统Zipkin部署过程

    SpringCloud可视化链路追踪系统Zipkin部署过程

    这篇文章主要介绍了SpringCloud可视化链路追踪系统Zipkin部署过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 详解Java数组的排序算法与二分查找法

    详解Java数组的排序算法与二分查找法

    这篇文章详细给大家介绍了Java数组的排序算法与二分查找法,文中有详细的代码示例,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-05-05
  • Springboot整合knife4j与shiro的操作

    Springboot整合knife4j与shiro的操作

    这篇文章主要介绍了Springboot整合knife4j与shiro的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring Boot非Web项目运行的方法

    Spring Boot非Web项目运行的方法

    这篇文章主要给大家介绍了关于Spring Boot非Web项目运行的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Java旋转数组中最小数字具体实现(图文详解版)

    Java旋转数组中最小数字具体实现(图文详解版)

    这篇文章主要给大家介绍了关于Java旋转数组中最小数字具体实现的相关资料,旋转数组,说明数据不变,只是改变位置,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 详解Springboot应用启动以及关闭时完成某些操作

    详解Springboot应用启动以及关闭时完成某些操作

    这篇文章主要介绍了详解Springboot应用启动以及关闭时完成某些操作,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • struts2自定义MVC框架

    struts2自定义MVC框架

    这篇文章主要为大家详细介绍了struts2如何自定义MVC框架,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 关于maven下载慢的问题

    关于maven下载慢的问题

    这篇文章主要介绍了关于maven下载慢的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 解析Java虚拟机中类的初始化及加载器的父委托机制

    解析Java虚拟机中类的初始化及加载器的父委托机制

    这篇文章主要介绍了Java虚拟机中类的初始化及加载器的父委托机制,包括命名空间等深层次的知识点讲解,需要的朋友可以参考下
    2015-11-11

最新评论