Minio 分布式文件存储方案 + spring boot整合 发表于 2020-11-02 | 分类于 中间件 , Minio | 本页总阅读数 次 参考博文 基于容器安装123docker pull minio/minio# MINIO_ACCESS_KEY、MINIO_SECRET_KEY 为可视化登录界面的账户密码docker run -p 9000:9000 --name minio1 -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" -v /mnt/data:/data -v /mnt/config:/root/.minio minio/minio server /data springboot整合依赖123456<!--minio文件系统 --><dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.0.2</version></dependency> 配置类12345678910111213141516171819@Configurationpublic class MinioConfig { // minio 地址 private static String URL = "http://121.41.72.27:9000"; // 用户ID private static String ACCESSKEY = "minio"; // 密钥 private static String SECRETKEY = "minio123"; @Bean public MinioClient minioClient() { try { return new MinioClient(URL, ACCESSKEY, SECRETKEY); } catch (final Exception e) { return null; } }} 控制层代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253@RestController@RequestMapping("view/minio")public class FileUploadController { @Autowired private MinioClient minioClient; private static final String BUCKET = "img"; @GetMapping(value = "/download") public void download(@RequestParam("fileName") String fileName, HttpServletResponse response) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException { InputStream in = null; final ObjectStat stat = minioClient.statObject(BUCKET, fileName); response.setContentType(stat.contentType()); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); in = minioClient.getObject(BUCKET, fileName); IOUtils.copy(in, response.getOutputStream()); in.close(); } @PostMapping(value = "/upload") public String upload(@RequestParam("file") MultipartFile file) throws Exception { if (file.isEmpty()) { throw new RuntimeException("上传文件不能为空"); } else { if(!minioClient.bucketExists(BUCKET)) { minioClient.makeBucket(BUCKET); } // 得到文件流 final InputStream is = file.getInputStream(); // 文件名 final String fileName = file.getOriginalFilename(); // 把文件放到minio的boots桶里面 minioClient.putObject(BUCKET, fileName, is, new PutObjectOptions(is.available(), -1)); // 关闭输入流 is.close(); String url = minioClient.getObjectUrl(BUCKET, fileName); return "上传成功, " + url; } } @GetMapping(value = "/delete", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public String delete(@RequestParam("fileName") String fileName) { try { minioClient.removeObject(BUCKET, fileName); return "删除成功"; } catch (Exception e) { return "删除失败"; } }} 至于图片预览,启动容器时,已将存储的文件映射到宿主机上,再结合springboot文件映射即可实现。 如果你觉得有帮助,慷慨如你,可以扫描下面的二维码赞赏一下 打赏 微信支付 支付宝