Minio服务集成
Showing
13 changed files
with
625 additions
and
8 deletions
| ... | @@ -366,7 +366,7 @@ | ... | @@ -366,7 +366,7 @@ |
| 366 | </profiles> | 366 | </profiles> |
| 367 | 367 | ||
| 368 | <properties> | 368 | <properties> |
| 369 | <oracle.version>11.2.0.4</oracle.version> | 369 | <oracle.version>11.2.0.3</oracle.version> |
| 370 | <geotools.version>24-SNAPSHOT</geotools.version> | 370 | <geotools.version>24-SNAPSHOT</geotools.version> |
| 371 | <org.springframework.version>5.1.8.RELEASE</org.springframework.version> | 371 | <org.springframework.version>5.1.8.RELEASE</org.springframework.version> |
| 372 | <org.spring.boot.version>2.1.8.RELEASE</org.spring.boot.version> | 372 | <org.spring.boot.version>2.1.8.RELEASE</org.spring.boot.version> | ... | ... |
This diff is collapsed.
Click to expand it.
| 1 | package com.pashanhoo.common.minio; | ||
| 2 | |||
| 3 | import io.minio.*; | ||
| 4 | import org.slf4j.Logger; | ||
| 5 | import org.slf4j.LoggerFactory; | ||
| 6 | import org.springframework.beans.factory.annotation.Autowired; | ||
| 7 | import org.springframework.stereotype.Component; | ||
| 8 | import org.springframework.web.multipart.MultipartFile; | ||
| 9 | |||
| 10 | import java.io.ByteArrayInputStream; | ||
| 11 | import java.io.InputStream; | ||
| 12 | import java.util.Date; | ||
| 13 | |||
| 14 | /** | ||
| 15 | * @author CAIYONGSONG | ||
| 16 | * @commpany www.pashanhoo.com | ||
| 17 | * @date 2022/7/20 | ||
| 18 | */ | ||
| 19 | @Component | ||
| 20 | public class FileServerOptUtil { | ||
| 21 | private Logger log = LoggerFactory.getLogger(FileServerOptUtil.class); | ||
| 22 | |||
| 23 | @Autowired | ||
| 24 | MinioClient minioClient; | ||
| 25 | |||
| 26 | /** | ||
| 27 | * 获取桶中某个对象的输入流 | ||
| 28 | * @param bucketName | ||
| 29 | * @param path | ||
| 30 | * @return | ||
| 31 | */ | ||
| 32 | public InputStream getObjectInputStream(String bucketName, String path){ | ||
| 33 | log.info("从桶:" + bucketName + ",获取:" + path + "对象流!"); | ||
| 34 | InputStream stream = null; | ||
| 35 | try { | ||
| 36 | stream = minioClient.getObject( | ||
| 37 | GetObjectArgs.builder().bucket(bucketName).object(path).build()); | ||
| 38 | } catch (Exception e) { | ||
| 39 | log.error("从桶:" + bucketName + ",获取:" + path + "对象流错误!"); | ||
| 40 | e.printStackTrace(); | ||
| 41 | } | ||
| 42 | return stream; | ||
| 43 | } | ||
| 44 | |||
| 45 | /** | ||
| 46 | * | ||
| 47 | * @param bucketName | ||
| 48 | * @param dirPath 如:path/to/ | ||
| 49 | * @return | ||
| 50 | */ | ||
| 51 | public boolean mkdir(String bucketName,String dirPath){ | ||
| 52 | log.info("在桶:" + bucketName + ",中创建:" + dirPath); | ||
| 53 | boolean result = false; | ||
| 54 | try { | ||
| 55 | minioClient.putObject( | ||
| 56 | PutObjectArgs.builder().bucket(bucketName).object(dirPath).stream( | ||
| 57 | new ByteArrayInputStream(new byte[] {}), 0, -1) | ||
| 58 | .build()); | ||
| 59 | result = true; | ||
| 60 | } catch (Exception e) { | ||
| 61 | log.error("在桶:" + bucketName + ",中创建:" + dirPath + "错误!"); | ||
| 62 | e.printStackTrace(); | ||
| 63 | } | ||
| 64 | return result; | ||
| 65 | } | ||
| 66 | |||
| 67 | |||
| 68 | /** | ||
| 69 | * 往对象存储服务目标桶的目标位置上传文件 | ||
| 70 | * @param bucketName 桶 | ||
| 71 | * @param toPath 目标位置如:test/2.txt | ||
| 72 | * @param fromPath 本地文件位置 | ||
| 73 | * @return | ||
| 74 | */ | ||
| 75 | public boolean uploadObject(String bucketName,String toPath,String fromPath ){ | ||
| 76 | log.info("从本地:" + fromPath + "往桶:" + bucketName + ",中上传文件:" + toPath); | ||
| 77 | boolean result = false; | ||
| 78 | try { | ||
| 79 | minioClient.uploadObject( | ||
| 80 | UploadObjectArgs.builder() | ||
| 81 | .bucket(bucketName) | ||
| 82 | .object(toPath) | ||
| 83 | .filename(fromPath) | ||
| 84 | .build()); | ||
| 85 | result = true; | ||
| 86 | } catch (Exception e) { | ||
| 87 | log.error("从本地:" + fromPath + "往桶:" + bucketName + ",中上传文件:" + toPath + "错误!"); | ||
| 88 | e.printStackTrace(); | ||
| 89 | } | ||
| 90 | return result; | ||
| 91 | } | ||
| 92 | |||
| 93 | |||
| 94 | /** | ||
| 95 | * 从桶中下载文件到本地文件 | ||
| 96 | * @param bucketName | ||
| 97 | * @param fromPath | ||
| 98 | * @param toPath | ||
| 99 | * @return | ||
| 100 | */ | ||
| 101 | public boolean downloadFile(String bucketName,String fromPath,String toPath){ | ||
| 102 | log.info("从桶:" + bucketName + "中将" + fromPath + "文件下载到:" + toPath); | ||
| 103 | boolean result = false; | ||
| 104 | try { | ||
| 105 | minioClient.downloadObject( | ||
| 106 | DownloadObjectArgs.builder() | ||
| 107 | .bucket(bucketName) | ||
| 108 | .object(fromPath) | ||
| 109 | .filename(toPath) | ||
| 110 | .build()); | ||
| 111 | result = true; | ||
| 112 | } catch (Exception e) { | ||
| 113 | log.error("从桶:" + bucketName + "中将" + fromPath + "文件下载到:" + toPath + "错误!"); | ||
| 114 | e.printStackTrace(); | ||
| 115 | } | ||
| 116 | return result; | ||
| 117 | } | ||
| 118 | public static String extractFilename(MultipartFile file){ | ||
| 119 | if (file.isEmpty()) { | ||
| 120 | throw new RuntimeException("文件不存在!"); | ||
| 121 | } | ||
| 122 | return DateUtils.dateToStr(new Date()) + "/" + System.currentTimeMillis() + "_" + file.getOriginalFilename() ; | ||
| 123 | |||
| 124 | } | ||
| 125 | } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | package com.pashanhoo.common.minio; | ||
| 2 | |||
| 3 | import io.minio.MinioClient; | ||
| 4 | import lombok.Data; | ||
| 5 | import org.slf4j.Logger; | ||
| 6 | import org.slf4j.LoggerFactory; | ||
| 7 | import org.springframework.boot.context.properties.ConfigurationProperties; | ||
| 8 | import org.springframework.context.annotation.Bean; | ||
| 9 | import org.springframework.stereotype.Component; | ||
| 10 | |||
| 11 | /** | ||
| 12 | * @author CAIYONGSONG | ||
| 13 | * @commpany www.pashanhoo.com | ||
| 14 | * @date 2022/7/20 | ||
| 15 | */ | ||
| 16 | @Data | ||
| 17 | @Component | ||
| 18 | @ConfigurationProperties(prefix = "minio") | ||
| 19 | public class MinioConfig { | ||
| 20 | private Logger log = LoggerFactory.getLogger(MinioConfig.class); | ||
| 21 | |||
| 22 | // minio地址 | ||
| 23 | private String minioUrl; | ||
| 24 | //minio账号 | ||
| 25 | private String accessKey; | ||
| 26 | //minio密码 | ||
| 27 | private String secretKey; | ||
| 28 | //存储桶名称 */ | ||
| 29 | public String bucketName; | ||
| 30 | // "如果是true,则用的是https而不是http,默认值是true" | ||
| 31 | public static Boolean secure = false; | ||
| 32 | |||
| 33 | |||
| 34 | @Bean | ||
| 35 | public MinioClient getMinioClient(){ | ||
| 36 | log.info("初始化MinioClient客户端:minioUrl:" + minioUrl + ",accessKey:" + accessKey + ",secretKey:" + secretKey); | ||
| 37 | MinioClient minioClient = MinioClient.builder() | ||
| 38 | .endpoint(minioUrl) | ||
| 39 | .credentials(accessKey,secretKey) | ||
| 40 | .build(); | ||
| 41 | return minioClient; | ||
| 42 | } | ||
| 43 | |||
| 44 | } |
| 1 | package com.pashanhoo.common.minio; | ||
| 2 | |||
| 3 | import io.minio.*; | ||
| 4 | import io.minio.messages.DeleteError; | ||
| 5 | import io.minio.messages.DeleteObject; | ||
| 6 | import io.minio.messages.Item; | ||
| 7 | import org.springframework.beans.factory.annotation.Autowired; | ||
| 8 | import org.springframework.stereotype.Component; | ||
| 9 | import org.springframework.util.FastByteArrayOutputStream; | ||
| 10 | import org.springframework.web.multipart.MultipartFile; | ||
| 11 | |||
| 12 | import javax.servlet.ServletOutputStream; | ||
| 13 | import javax.servlet.http.HttpServletResponse; | ||
| 14 | import java.util.ArrayList; | ||
| 15 | import java.util.List; | ||
| 16 | import java.util.stream.Collectors; | ||
| 17 | |||
| 18 | /** | ||
| 19 | * @author CAIYONGSONG | ||
| 20 | * @commpany www.pashanhoo.com | ||
| 21 | * @date 2022/7/20 | ||
| 22 | */ | ||
| 23 | |||
| 24 | @Component | ||
| 25 | public class MinioUtil { | ||
| 26 | |||
| 27 | @Autowired | ||
| 28 | private MinioClient minioClient; | ||
| 29 | |||
| 30 | /** | ||
| 31 | * 查看存储bucket是否存在 | ||
| 32 | * | ||
| 33 | * @param bucketName 存储bucket | ||
| 34 | * @return boolean | ||
| 35 | */ | ||
| 36 | public Boolean bucketExists(String bucketName) { | ||
| 37 | Boolean found; | ||
| 38 | try { | ||
| 39 | found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); | ||
| 40 | } catch (Exception e) { | ||
| 41 | e.printStackTrace(); | ||
| 42 | return false; | ||
| 43 | } | ||
| 44 | return found; | ||
| 45 | } | ||
| 46 | |||
| 47 | /** | ||
| 48 | * 创建存储bucket | ||
| 49 | * | ||
| 50 | * @param bucketName 存储bucket名称 | ||
| 51 | * @return Boolean | ||
| 52 | */ | ||
| 53 | public Boolean makeBucket(String bucketName) { | ||
| 54 | try { | ||
| 55 | minioClient.makeBucket(MakeBucketArgs.builder() | ||
| 56 | .bucket(bucketName) | ||
| 57 | .build()); | ||
| 58 | } catch (Exception e) { | ||
| 59 | e.printStackTrace(); | ||
| 60 | return false; | ||
| 61 | } | ||
| 62 | return true; | ||
| 63 | } | ||
| 64 | |||
| 65 | /** | ||
| 66 | * 删除存储bucket | ||
| 67 | * | ||
| 68 | * @param bucketName 存储bucket名称 | ||
| 69 | * @return Boolean | ||
| 70 | */ | ||
| 71 | public Boolean removeBucket(String bucketName) { | ||
| 72 | try { | ||
| 73 | minioClient.removeBucket(RemoveBucketArgs.builder() | ||
| 74 | .bucket(bucketName) | ||
| 75 | .build()); | ||
| 76 | } catch (Exception e) { | ||
| 77 | e.printStackTrace(); | ||
| 78 | return false; | ||
| 79 | } | ||
| 80 | return true; | ||
| 81 | } | ||
| 82 | |||
| 83 | /** | ||
| 84 | * 文件上传 | ||
| 85 | * | ||
| 86 | * @param file 文件 | ||
| 87 | * @param bucketName 存储bucket | ||
| 88 | * @return Boolean | ||
| 89 | */ | ||
| 90 | public Boolean upload(MultipartFile file, String fileName, String bucketName) { | ||
| 91 | try { | ||
| 92 | PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(fileName) | ||
| 93 | .stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build(); | ||
| 94 | //文件名称相同会覆盖 | ||
| 95 | minioClient.putObject(objectArgs); | ||
| 96 | } catch (Exception e) { | ||
| 97 | e.printStackTrace(); | ||
| 98 | return false; | ||
| 99 | } | ||
| 100 | return true; | ||
| 101 | } | ||
| 102 | |||
| 103 | /** | ||
| 104 | * 文件下载 | ||
| 105 | * | ||
| 106 | * @param bucketName 存储bucket名称 | ||
| 107 | * @param fileName 文件名称 | ||
| 108 | * @param res response | ||
| 109 | * @return Boolean | ||
| 110 | */ | ||
| 111 | public void download(String bucketName, String fileName, HttpServletResponse res) { | ||
| 112 | GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(bucketName) | ||
| 113 | .object(fileName).build(); | ||
| 114 | try (GetObjectResponse response = minioClient.getObject(objectArgs)) { | ||
| 115 | byte[] buf = new byte[1024]; | ||
| 116 | int len; | ||
| 117 | try (FastByteArrayOutputStream os = new FastByteArrayOutputStream()) { | ||
| 118 | while ((len = response.read(buf)) != -1) { | ||
| 119 | os.write(buf, 0, len); | ||
| 120 | } | ||
| 121 | os.flush(); | ||
| 122 | byte[] bytes = os.toByteArray(); | ||
| 123 | res.setCharacterEncoding("utf-8"); | ||
| 124 | //设置强制下载不打开 | ||
| 125 | res.setContentType("application/force-download"); | ||
| 126 | res.addHeader("Content-Disposition", "attachment;fileName=" + fileName); | ||
| 127 | try (ServletOutputStream stream = res.getOutputStream()) { | ||
| 128 | stream.write(bytes); | ||
| 129 | stream.flush(); | ||
| 130 | } | ||
| 131 | } | ||
| 132 | } catch (Exception e) { | ||
| 133 | e.printStackTrace(); | ||
| 134 | } | ||
| 135 | } | ||
| 136 | |||
| 137 | /** | ||
| 138 | * 查看文件对象 | ||
| 139 | * | ||
| 140 | * @param bucketName 存储bucket名称 | ||
| 141 | * @return 存储bucket内文件对象信息 | ||
| 142 | */ | ||
| 143 | public List<ObjectItem> listObjects(String bucketName) { | ||
| 144 | Iterable<Result<Item>> results = minioClient.listObjects( | ||
| 145 | ListObjectsArgs.builder().bucket(bucketName).build()); | ||
| 146 | List<ObjectItem> objectItems = new ArrayList<>(); | ||
| 147 | try { | ||
| 148 | for (Result<Item> result : results) { | ||
| 149 | Item item = result.get(); | ||
| 150 | ObjectItem objectItem = new ObjectItem(); | ||
| 151 | objectItem.setObjectName(item.objectName()); | ||
| 152 | objectItem.setSize(item.size()); | ||
| 153 | objectItems.add(objectItem); | ||
| 154 | } | ||
| 155 | } catch (Exception e) { | ||
| 156 | e.printStackTrace(); | ||
| 157 | return null; | ||
| 158 | } | ||
| 159 | return objectItems; | ||
| 160 | } | ||
| 161 | |||
| 162 | /** | ||
| 163 | * 批量删除文件对象 | ||
| 164 | * | ||
| 165 | * @param bucketName 存储bucket名称 | ||
| 166 | * @param objects 对象名称集合 | ||
| 167 | */ | ||
| 168 | public Iterable<Result<DeleteError>> removeObjects(String bucketName, List<String> objects) { | ||
| 169 | List<DeleteObject> dos = objects.stream().map(e -> new DeleteObject(e)).collect(Collectors.toList()); | ||
| 170 | Iterable<Result<DeleteError>> results = minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(dos).build()); | ||
| 171 | return results; | ||
| 172 | } | ||
| 173 | |||
| 174 | } |
| 1 | package com.pashanhoo.common.minio; | ||
| 2 | |||
| 3 | import io.swagger.annotations.ApiModel; | ||
| 4 | |||
| 5 | /** | ||
| 6 | * @author CAIYONGSONG | ||
| 7 | * @commpany www.pashanhoo.com | ||
| 8 | * @date 2022/7/20 | ||
| 9 | */ | ||
| 10 | @ApiModel("用户实体类") | ||
| 11 | public class ObjectItem { | ||
| 12 | |||
| 13 | long size; | ||
| 14 | String objectName; | ||
| 15 | |||
| 16 | public long getSize() { | ||
| 17 | return size; | ||
| 18 | } | ||
| 19 | |||
| 20 | public void setSize(long size) { | ||
| 21 | this.size = size; | ||
| 22 | } | ||
| 23 | |||
| 24 | public String getObjectName() { | ||
| 25 | return objectName; | ||
| 26 | } | ||
| 27 | |||
| 28 | public void setObjectName(String objectName) { | ||
| 29 | this.objectName = objectName; | ||
| 30 | } | ||
| 31 | } |
| 1 | package com.pashanhoo.config; | ||
| 2 | |||
| 3 | import lombok.extern.slf4j.Slf4j; | ||
| 4 | import org.springframework.context.annotation.Bean; | ||
| 5 | import org.springframework.context.annotation.Configuration; | ||
| 6 | import org.springframework.web.client.RestTemplate; | ||
| 7 | |||
| 8 | /** | ||
| 9 | * @author CAIYONGSONG | ||
| 10 | * @commpany www.pashanhoo.com | ||
| 11 | * @date 2022/8/18 | ||
| 12 | */ | ||
| 13 | @Configuration | ||
| 14 | @Slf4j | ||
| 15 | public class TestTemplateBeanConfig { | ||
| 16 | @Bean | ||
| 17 | RestTemplate restTemplate(){ | ||
| 18 | log.info("完成初始化RestTemplate得bean"); | ||
| 19 | return new RestTemplate(); | ||
| 20 | } | ||
| 21 | } |
| 1 | package com.pashanhoo.qys.controller; | ||
| 2 | |||
| 3 | |||
| 4 | import com.pashanhoo.common.Result; | ||
| 5 | import com.pashanhoo.qys.service.SysFileService; | ||
| 6 | import io.minio.GetObjectArgs; | ||
| 7 | import io.minio.ListObjectsArgs; | ||
| 8 | import io.minio.MinioClient; | ||
| 9 | import io.minio.messages.Item; | ||
| 10 | import io.swagger.annotations.Api; | ||
| 11 | import io.swagger.annotations.ApiOperation; | ||
| 12 | import org.apache.tomcat.util.http.fileupload.IOUtils; | ||
| 13 | import org.springframework.beans.factory.annotation.Autowired; | ||
| 14 | import org.springframework.http.MediaType; | ||
| 15 | import org.springframework.util.StringUtils; | ||
| 16 | import org.springframework.web.bind.annotation.*; | ||
| 17 | import org.springframework.web.multipart.MultipartFile; | ||
| 18 | |||
| 19 | import javax.servlet.http.HttpServletResponse; | ||
| 20 | import java.io.BufferedOutputStream; | ||
| 21 | import java.io.IOException; | ||
| 22 | import java.io.InputStream; | ||
| 23 | import java.net.URLEncoder; | ||
| 24 | |||
| 25 | /** | ||
| 26 | * @author CAIYONGSONG | ||
| 27 | * @commpany www.pashanhoo.com | ||
| 28 | * @date 2022/7/20 | ||
| 29 | */ | ||
| 30 | |||
| 31 | @Api(tags = "Minio文件上传") | ||
| 32 | @RestController | ||
| 33 | @RequestMapping("/system/file") | ||
| 34 | public class SysFileController { | ||
| 35 | |||
| 36 | @Autowired | ||
| 37 | private SysFileService sysFileService; | ||
| 38 | |||
| 39 | @Autowired | ||
| 40 | private MinioClient minioClient; | ||
| 41 | |||
| 42 | /** | ||
| 43 | * 图片上传minio | ||
| 44 | * | ||
| 45 | * @param file 图片文件 | ||
| 46 | * @return 返回 | ||
| 47 | */ | ||
| 48 | @ApiOperation("点选文件-文件上传") | ||
| 49 | @RequestMapping(value = "/upload", method = RequestMethod.POST) | ||
| 50 | public Result uploadFileMinio(MultipartFile file) { | ||
| 51 | String url = sysFileService.uploadFileMinio(file); | ||
| 52 | if (!StringUtils.isEmpty(url)) { | ||
| 53 | return Result.ok(url); | ||
| 54 | } | ||
| 55 | return Result.error(-1,"上传失败"); | ||
| 56 | } | ||
| 57 | |||
| 58 | @PostMapping(value = "/upload-files" ) | ||
| 59 | @ApiOperation(value = "文件上传(支持批量)", notes = "文件上传(支持批量)") | ||
| 60 | public Result uploadFiles(@RequestPart MultipartFile[] files ) throws IOException { | ||
| 61 | String url = sysFileService.uploadFileMinio(files); | ||
| 62 | if (!StringUtils.isEmpty(url)) { | ||
| 63 | return Result.ok(url); | ||
| 64 | } | ||
| 65 | return Result.error(-1,"上传失败"); | ||
| 66 | } | ||
| 67 | |||
| 68 | // 暂未实现 | ||
| 69 | @ApiOperation("文件下载") | ||
| 70 | @RequestMapping(value = "/download", method = RequestMethod.POST) | ||
| 71 | public String download(HttpServletResponse response) { | ||
| 72 | try { | ||
| 73 | Iterable<io.minio.Result<Item>> results = minioClient.listObjects( | ||
| 74 | ListObjectsArgs.builder().bucket("eci-bucket").build()//获取bucket里所有文件信息 | ||
| 75 | ); | ||
| 76 | String fileName = null; | ||
| 77 | for (io.minio.Result<Item> result : results) { | ||
| 78 | Item item = result.get(); | ||
| 79 | fileName = item.objectName(); | ||
| 80 | System.out.println(item.lastModified() + "\t" + item.size() + "\t" + item.objectName()); | ||
| 81 | } | ||
| 82 | |||
| 83 | InputStream object = minioClient.getObject(GetObjectArgs.builder().bucket("eci-bucket").object(fileName).build()); | ||
| 84 | BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); | ||
| 85 | IOUtils.copy(object, bos); | ||
| 86 | response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); | ||
| 87 | response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); | ||
| 88 | bos.flush(); | ||
| 89 | return "success"; | ||
| 90 | } catch (Exception e) { | ||
| 91 | e.printStackTrace(); | ||
| 92 | return e.getMessage(); | ||
| 93 | } | ||
| 94 | } | ||
| 95 | |||
| 96 | } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | package com.pashanhoo.qys.service; | ||
| 2 | |||
| 3 | import org.springframework.web.multipart.MultipartFile; | ||
| 4 | |||
| 5 | /** | ||
| 6 | * @author CAIYONGSONG | ||
| 7 | * @commpany www.pashanhoo.com | ||
| 8 | * @date 2022/7/20 | ||
| 9 | */ | ||
| 10 | public interface SysFileService { | ||
| 11 | |||
| 12 | public String uploadFileMinio(MultipartFile file); | ||
| 13 | public String uploadFileMinio(MultipartFile[] file); | ||
| 14 | } |
| 1 | package com.pashanhoo.qys.service.impl; | ||
| 2 | |||
| 3 | import com.pashanhoo.common.minio.FileServerOptUtil; | ||
| 4 | import com.pashanhoo.common.minio.MinioConfig; | ||
| 5 | import com.pashanhoo.common.minio.MinioUtil; | ||
| 6 | import com.pashanhoo.qys.service.SysFileService; | ||
| 7 | import lombok.extern.slf4j.Slf4j; | ||
| 8 | import org.springframework.beans.factory.annotation.Autowired; | ||
| 9 | import org.springframework.stereotype.Service; | ||
| 10 | import org.springframework.web.multipart.MultipartFile; | ||
| 11 | |||
| 12 | /** | ||
| 13 | * @author CAIYONGSONG | ||
| 14 | * @commpany www.pashanhoo.com | ||
| 15 | * @date 2022/7/20 | ||
| 16 | */ | ||
| 17 | @Service | ||
| 18 | @Slf4j | ||
| 19 | public class SysFileServiceImpl implements SysFileService { | ||
| 20 | |||
| 21 | @Autowired | ||
| 22 | private MinioConfig minioConfig; | ||
| 23 | |||
| 24 | @Autowired | ||
| 25 | private MinioUtil minioUtil; | ||
| 26 | |||
| 27 | @Override | ||
| 28 | public String uploadFileMinio(MultipartFile[] files){ | ||
| 29 | Long st = System.currentTimeMillis(); | ||
| 30 | log.info("开始上传批量文件" + files.length); | ||
| 31 | // 判断存储桶是否存在 | ||
| 32 | if (!minioUtil.bucketExists(minioConfig.getBucketName())) { | ||
| 33 | minioUtil.makeBucket(minioConfig.getBucketName()); | ||
| 34 | } | ||
| 35 | StringBuilder sbf = new StringBuilder(); | ||
| 36 | for (MultipartFile file : files) { | ||
| 37 | if (file.isEmpty()) { | ||
| 38 | throw new RuntimeException("文件不存在!"); | ||
| 39 | } | ||
| 40 | log.info("循环开始上传单个文件,文件大小:" + file.getSize()); | ||
| 41 | |||
| 42 | // 生成文件名 按照要求-带文件夹路径的文件的全路径 | ||
| 43 | String fineName = FileServerOptUtil.extractFilename(file); | ||
| 44 | try { | ||
| 45 | // 上传文件 | ||
| 46 | minioUtil.upload(file, fineName, minioConfig.getBucketName()); | ||
| 47 | } catch (Exception e) { | ||
| 48 | System.out.println("上传minio服务器期出错了 " + e.getMessage()); | ||
| 49 | e.printStackTrace(); | ||
| 50 | return null; | ||
| 51 | } | ||
| 52 | sbf.append(minioConfig.getMinioUrl()).append("/").append( minioConfig.getBucketName()) | ||
| 53 | .append("/").append(fineName).append(","); | ||
| 54 | } | ||
| 55 | //String url = minioConfig.getMinioUrl() + "/" + minioConfig.getBucketName() + "/" + fineName; | ||
| 56 | String resUrl = sbf.toString().substring(0,(sbf.length()-1)); | ||
| 57 | log.info("上传文件结束,总耗时:"+(System.currentTimeMillis() - st) +"s, 文件路径:" + resUrl ); | ||
| 58 | return resUrl; | ||
| 59 | |||
| 60 | } | ||
| 61 | |||
| 62 | @Override | ||
| 63 | public String uploadFileMinio(MultipartFile file) { | ||
| 64 | Long st = System.currentTimeMillis(); | ||
| 65 | if (file.isEmpty()) { | ||
| 66 | throw new RuntimeException("文件不存在!"); | ||
| 67 | } | ||
| 68 | log.info("开始上传单个文件,文件大小:" + (file.getSize()/1024) + "KB"); | ||
| 69 | // 判断存储桶是否存在 | ||
| 70 | if (!minioUtil.bucketExists(minioConfig.getBucketName())) { | ||
| 71 | minioUtil.makeBucket(minioConfig.getBucketName()); | ||
| 72 | } | ||
| 73 | // 生成文件名 按照要求-带文件夹路径的文件的全路径 | ||
| 74 | String fineName = FileServerOptUtil.extractFilename(file); | ||
| 75 | try { | ||
| 76 | // 上传文件 | ||
| 77 | minioUtil.upload(file, fineName, minioConfig.getBucketName()); | ||
| 78 | } catch (Exception e) { | ||
| 79 | System.out.println("上传minio服务器期出错了 " + e.getMessage()); | ||
| 80 | e.printStackTrace(); | ||
| 81 | return null; | ||
| 82 | } | ||
| 83 | |||
| 84 | String url = minioConfig.getMinioUrl() + "/" + minioConfig.getBucketName() + "/" + fineName; | ||
| 85 | |||
| 86 | log.info("上传文件结束,总耗时:"+(System.currentTimeMillis() - st) +"ms, 文件路径:" + url ); | ||
| 87 | return url; | ||
| 88 | |||
| 89 | } | ||
| 90 | } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -7,8 +7,8 @@ server: | ... | @@ -7,8 +7,8 @@ server: |
| 7 | spring: | 7 | spring: |
| 8 | servlet: | 8 | servlet: |
| 9 | multipart: | 9 | multipart: |
| 10 | maxFileSize: 10MB | 10 | maxFileSize: 100MB |
| 11 | maxRequestSize: 10MB | 11 | maxRequestSize: 500MB |
| 12 | application: | 12 | application: |
| 13 | name: hzbdcsyn | 13 | name: hzbdcsyn |
| 14 | jackson: | 14 | jackson: |
| ... | @@ -71,5 +71,16 @@ management: | ... | @@ -71,5 +71,16 @@ management: |
| 71 | 71 | ||
| 72 | logging: | 72 | logging: |
| 73 | config: "classpath:logback-spring.xml" | 73 | config: "classpath:logback-spring.xml" |
| 74 | 74 | # Minio配置 | |
| 75 | minio: | ||
| 76 | # minio配置的地址,端口9000 | ||
| 77 | minioUrl: http://172.16.56.30:90 | ||
| 78 | # 账号 | ||
| 79 | accessKey: minioadmin | ||
| 80 | # 密码 | ||
| 81 | secretKey: minioadmin | ||
| 82 | # MinIO桶名字 | ||
| 83 | bucketName: ecibucket | ||
| 84 | swagger2: | ||
| 85 | enable: false | ||
| 75 | 86 | ... | ... |
| ... | @@ -7,8 +7,8 @@ server: | ... | @@ -7,8 +7,8 @@ server: |
| 7 | spring: | 7 | spring: |
| 8 | servlet: | 8 | servlet: |
| 9 | multipart: | 9 | multipart: |
| 10 | maxFileSize: 10MB | 10 | maxFileSize: 100MB |
| 11 | maxRequestSize: 10MB | 11 | maxRequestSize: 500MB |
| 12 | application: | 12 | application: |
| 13 | name: hzbdcsyn | 13 | name: hzbdcsyn |
| 14 | jackson: | 14 | jackson: |
| ... | @@ -71,5 +71,16 @@ management: | ... | @@ -71,5 +71,16 @@ management: |
| 71 | 71 | ||
| 72 | logging: | 72 | logging: |
| 73 | config: "classpath:logback-spring.xml" | 73 | config: "classpath:logback-spring.xml" |
| 74 | 74 | # Minio配置 | |
| 75 | minio: | ||
| 76 | # minio配置的地址,端口9000 | ||
| 77 | minioUrl: http://172.16.56.30:90 | ||
| 78 | # 账号 | ||
| 79 | accessKey: minioadmin | ||
| 80 | # 密码 | ||
| 81 | secretKey: minioadmin | ||
| 82 | # MinIO桶名字 | ||
| 83 | bucketName: ecibucket | ||
| 84 | swagger2: | ||
| 85 | enable: true | ||
| 75 | 86 | ... | ... |
-
Please register or sign in to post a comment