# minioStudy **Repository Path**: kill-life/minio-study ## Basic Information - **Project Name**: minioStudy - **Description**: minioStudy record - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-03 - **Last Updated**: 2024-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # minioStudy ## 介绍 minioStudy record - 主要体验minio简单对象存储在springboot项目中使用和开发技巧 --- - SQL脚本文件在SQL文件夹中minio.sql - 数据库名称为: minio - minio用户和密码均采用:minioadmin - 前端不太完善:基本实现上传、修改、删除、查询的功能 ## 有益的代码 ### 文件上传 - 通过上传对象文件同时修改数据库记录,注意原子性 ```java /** * 上传图片 */ @PostMapping(value = "/api/user/image") public R uploadImage(MultipartFile file, @RequestParam(value = "id") Long id) throws Exception { //例如 1234.jpg 获取文件类型 jpg // file.getOriginalFilename().indexOf(".") 原始文件名中查找第一个出现的 . 的位置 // file.getOriginalFilename().substring(...) 从文件名中提取从索引 4 开始到结尾的所有字符,即从第一个.后开始的所有字符。 String subFix = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".")); String object = id+subFix; // 上传图片到 MinIO ObjectWriteResponse objectWriteResponse = minioClient.putObject(PutObjectArgs.builder() .bucket(minIOInfo.getBucket()) // 配置桶名称 .object(object) //设置对象名 .stream(file.getInputStream(), file.getSize(), -1) //文件流 .build() ); System.out.println(objectWriteResponse); boolean res = userImageService.saveOrUpdateUserImage(id, minIOInfo.getBucket(), object); return R.OK(res); } ``` ### 文件下载 - 通过查询数据库获取文件信息,下载文件 ```java /** * 合同文件下载 * @param id 用户id * @param response 返回结果封装 */ @GetMapping(value = "/api/download/{id}") public void download(@PathVariable(value = "id") Integer id, HttpServletResponse response) throws Exception { //查询数据库获取 用户信息 桶信息 和文件对象信息 UserInfo userInfo = userInfoService.getUserById(id); String bucket = userInfo.getUserContractDO().getBucket(); String object = userInfo.getUserContractDO().getObject(); //后端设置一下响应头信息,方便浏览器弹出下载框 response.setContentType("application/octet-stream"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(object, StandardCharsets.UTF_8)); // 从minion获取合同文件数据 GetObjectResponse getObjectResponse = minioClient.getObject(GetObjectArgs.builder() .bucket(bucket) .object(object) .build()); getObjectResponse.transferTo(response.getOutputStream()); } ```