标签:return String OSS fileName --- bucketName org import springboot
1.引入pom,okhttp有版本要求,最低4.8.3
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.4.2</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.3</version> </dependency>
2.新增客户端配置类MinioConfig.java
package com.fast.file; import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MinioConfig { @Autowired private MinioProperties minioProperties; @Bean public MinioClient minioClient(){ return MinioClient.builder() .endpoint(minioProperties.getEndpoint()) .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey()) .build(); } }
3.在application.yml中新增minio配置
minio: endpoint: http://localhost:9000 accesskey: minioadmin secretKey: minioadmin bucketName: test
4.新增属性接收类MinioProperties.java
package com.fast.file; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @Component @ConfigurationProperties(prefix = "minio") public class MinioProperties { private String endpoint; private String accessKey; private String secretKey; }
5.新增MinioController.java
package com.fast.file; import cn.hutool.json.JSON; import cn.hutool.json.JSONUtil; import com.fast.common.result.common.R; import io.minio.*; import io.minio.messages.Item; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.text.DecimalFormat; import java.util.*; @Api(tags = "Minio文件管理") @RestController @Slf4j public class MinioController { @Autowired private MinioClient minioClient; @Value("${minio.bucketName}") private String bucketName; @ApiOperation("查看文件列表") @GetMapping("/list") public List<Object> list() throws Exception { //获取bucket列表 Iterable<Result<Item>> myObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build()); Iterator<Result<Item>> iterator = myObjects.iterator(); List<Object> items = new ArrayList<>(); String format = "{'fileName':'%s','fileSize':'%s'}"; while (iterator.hasNext()) { Item item = iterator.next().get(); items.add(JSONUtil.parse(String.format(format, item.objectName(), formatFileSize(item.size())))); } return items; } @ApiOperation("文件上传-支持批量") @PostMapping("/upload") public R upload(@RequestParam(name = "file", required = false) MultipartFile[] file) { if (file == null || file.length == 0) { return R.fail("上传文件不能为空"); } List<String> orgfileNameList = new ArrayList<>(file.length); for (MultipartFile multipartFile : file) { String orgfileName = multipartFile.getOriginalFilename(); orgfileNameList.add(orgfileName); try { //文件上传 InputStream in = multipartFile.getInputStream(); minioClient.putObject( PutObjectArgs.builder() .bucket(bucketName) .object(orgfileName) .stream(in, multipartFile.getSize(), -1) .contentType(multipartFile.getContentType()) .build()); in.close(); } catch (Exception e) { return R.fail("上传失败"); } } Map<String, Object> data = new HashMap<String, Object>(); data.put("bucketName", bucketName); data.put("fileName", orgfileNameList); return R.data(data); } @ApiOperation("文件下载") @GetMapping("/download/{fileName}") public void download(HttpServletResponse response, @PathVariable("fileName") String fileName) { InputStream in = null; try { // 获取对象信息 StatObjectResponse stat = minioClient.statObject( StatObjectArgs.builder() .bucket(bucketName) .object(fileName) .build()); response.setContentType(stat.contentType()); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); //文件下载 in = minioClient.getObject(GetObjectArgs.builder() .bucket(bucketName) .object(fileName) .build()); IOUtils.copy(in, response.getOutputStream()); } catch (Exception e) { log.error(e.getMessage()); } finally { if (in != null) { try { in.close(); } catch (IOException e) { log.error(e.getMessage()); } } } } @ApiOperation("文件删除") @DeleteMapping("/delete/{fileName}") public R delete(@PathVariable("fileName") String fileName) { try { minioClient.removeObject( RemoveObjectArgs.builder() .bucket(bucketName) .object(fileName) .build()); } catch (Exception e) { log.error(e.getMessage()); return R.fail("删除失败"); } return R.success("删除成功"); } private static String formatFileSize(long fileS) { DecimalFormat df = new DecimalFormat("#.00"); String fileSizeString = ""; String wrongSize = "0B"; if (fileS == 0) { return wrongSize; } if (fileS < 1024) { fileSizeString = df.format((double) fileS) + " B"; } else if (fileS < 1048576) { fileSizeString = df.format((double) fileS / 1024) + " KB"; } else if (fileS < 1073741824) { fileSizeString = df.format((double) fileS / 1048576) + " MB"; } else { fileSizeString = df.format((double) fileS / 1073741824) + " GB"; } return fileSizeString; } }
标签:return,String,OSS,fileName,---,bucketName,org,import,springboot 来源: https://www.cnblogs.com/hujunwei/p/16438055.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。