赞
踩
- public class MinIOConfig {
- @Autowired
- private MinIOConfigProperties minIOConfigProperties;
-
- @Bean
- public MinioClient buildMinioClient() {
- return MinioClient
- .builder()
- .credentials(minIOConfigProperties.getAccessKey(), minIOConfigProperties.getSecretKey())
- .endpoint(minIOConfigProperties.getEndpoint())
- .build();
- }
- }
- @Data
- @ConfigurationProperties(prefix = "minio")
- @Component
- public class MinIOConfigProperties implements Serializable {
-
- private String accessKey;
- private String secretKey;
- private String bucket;
- private String endpoint;
- private String readPath;
-
- }
- public interface MinioFileService {
-
- /**
- * 下载文件
- * @param pathUrl
- * @param response
- */
- void downLoadFile(String pathUrl, HttpServletResponse response) ;
-
- /**
- * 上传文件到指定tong桶下面的指定目录
- * @param bucketName 桶名称
- * @param folderPath 目录名称
- * @param file 文件
- */
- String downLoadFileByPath(String bucketName,String folderPath, MultipartFile file) throws Exception;
-
-
- /**
- * 上传文件
- * @param file
- * @return
- * @throws Exception
- */
- String uploadFile(File file) throws Exception;
-
-
- /**
- * 创建临时目录
- * @return
- */
- File createTempDir();
-
-
- /**
- * 删除文件
- * @param pathUrl
- */
- void delete(String pathUrl) ;
-
- /**
- * 列出所有bucket名称
- * @return
- * @throws Exception
- */
- List<String> listBucketNames() throws Exception;
-
- /**
- * 创建bucket
- * @param bucketName
- * @return
- * @throws Exception
- */
- boolean makeBucket(String bucketName) throws Exception;
-
- /**
- * 删除bucket
- * @param bucketName
- * @return
- * @throws Exception
- */
- boolean removeBucket(String bucketName) throws Exception;
-
- /**
- * 列出bucket的所有对象名称
- * @param bucketName
- * @return
- * @throws Exception
- */
- List<String> listObjectNames(String bucketName) throws Exception;
-
-
- Iterable<Result<Item>> listObjects(String bucketName) throws Exception;
- }

- @Slf4j
- @Import(MinIOConfig.class)
- @Service
- public class MinioFileServiceImpl implements MinioFileService {
-
-
- @Autowired
- private MinioClient minioClient;
-
- @Autowired
- private MinIOConfigProperties minIOConfigProperties;
-
- private final static String separator = "/";
-
- @Value("${Temporary_file_address}")
- private String Temporary_file_address;
-
- /**
- * 下载文件
- *
- * @param pathUrl 文件全路径
- * @return 文件流
- */
- @Override
- public void downLoadFile(String pathUrl, HttpServletResponse response) {
- String[] pathItems = pathUrl.split("/");
- String originFileName = pathItems[pathItems.length - 1];
- String key = pathUrl.replace(minIOConfigProperties.getEndpoint() + "/", "");
- int index = key.indexOf(separator);
- //String bucket = key.substring(0,index);
- String filePath = key.substring(index + 1);
- InputStream inputStream = null;
- try {
- inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(minIOConfigProperties.getBucket()).object(filePath).build());
- response.setHeader("Content-Disposition", "attachment;filename=" + originFileName);
- response.setContentType("application/force-download");
- response.setCharacterEncoding("UTF-8");
- IOUtils.copy(inputStream, response.getOutputStream());
- System.out.println("下载成功");
- } catch (Exception e) {
- log.error("minio down file error. pathUrl:{}", pathUrl);
- e.printStackTrace();
- } finally {
- try {
- inputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- @Override
- public String downLoadFileByPath(String bucketName, String folderPath, MultipartFile file) throws Exception{
- String endpoint = minIOConfigProperties.getEndpoint();
- // 上传文件到指定文件夹
- String objectName = folderPath+"/" + file.getOriginalFilename();
- PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName)
- .bucket(bucketName)
- .contentType(file.getContentType())
- .stream(file.getInputStream(), file.getSize(), -1).build();
- minioClient.putObject(objectArgs);
- return endpoint + "/" + bucketName + "/" + objectName;
-
- }
-
- // @Override
- // public String uploadFile(MultipartFile file) throws Exception {
- // String bucketName = minIOConfigProperties.getBucket();
- // String endpoint = minIOConfigProperties.getEndpoint();
- // InputStream inputStream = file.getInputStream();
- // // 检查存储桶是否已经存在
- // boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
- // if (isExist) {
- // System.out.println("Bucket already exists.");
- // } else {
- // minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
- // }
- // String originalFilename = file.getOriginalFilename();
- // //拼接生成新的UUID形式的文件名
- // String objectName = new SimpleDateFormat("yyyy/MM/dd/").format(new Date()) +
- // UUID.randomUUID().toString().replaceAll("-", "")
- // + originalFilename.substring(originalFilename.lastIndexOf("."));
- //
- // PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName)
- // .bucket(bucketName)
- // .contentType(file.getContentType())
- // .stream(inputStream, file.getSize(), -1).build();
- // minioClient.putObject(objectArgs);
- // inputStream.close();
- // //组装桶中文件的访问url
- // String resUrl = endpoint + "/" + bucketName + "/" + objectName;
- // return resUrl;
- // }
- @Override
- public String uploadFile(File file) throws Exception {
- String bucketName = minIOConfigProperties.getBucket();
- String endpoint = minIOConfigProperties.getEndpoint();
-
- try {
- // 检查存储桶是否已经存在
- if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
- minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
- }
- // 拼接生成新的UUID形式的文件名
- String objectName = new SimpleDateFormat("yyyy/MM/dd/").format(new Date()) +
- UUID.randomUUID().toString().replaceAll("-", "") +
- file.getName().substring(file.getName().lastIndexOf("."));
- // 上传
- minioClient.uploadObject(UploadObjectArgs.builder()
- .bucket(bucketName)
- .object(objectName)
- .filename(file.getAbsolutePath())
- .build());
- // 组装桶中文件的访问url
- return endpoint + "/" + bucketName + "/" + objectName;
- } catch (Exception e) {
- log.error("上传文件 {} 失败: {}", file.getName(), e.getMessage());
- e.printStackTrace();
- throw new ServiceException(1000000500, "上传文件失败:" + e);
- } finally {
- // 删除临时文件
- this.deleteTempFile(file);
- }
- }
-
- /**
- * 在应用启动时
- * 创建临时目录
- */
- @Override
- public File createTempDir() {
- String property = System.getProperty("user.home");
- // 生成或指定文件存储的目录
- File dir = new File(property);
- if (!dir.exists()) {
- dir.mkdirs();
- }
- return dir;
- }
- /**
- * 删除临时文件
- * @param file file
- */
- private void deleteTempFile(File file) {
- try {
- Files.deleteIfExists(Paths.get(file.getAbsolutePath()));
- } catch (IOException e) {
- log.error("删除临时文件失败: {}", file.getAbsolutePath(), e);
- }
- }
-
-
- /**
- * 删除文件
- *
- * @param pathUrl 文件全路径
- */
- @Override
- public void delete(String pathUrl) {
- String key = pathUrl.replace(minIOConfigProperties.getEndpoint() + "/", "");
- int index = key.indexOf(separator);
- String bucket = key.substring(0, index);
- String filePath = key.substring(index + 1);
- // 删除Objects
- RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(filePath).build();
- try {
- minioClient.removeObject(removeObjectArgs);
- } catch (Exception e) {
- log.error("minio remove file error. pathUrl:{}", pathUrl);
- e.printStackTrace();
- }
- }
-
- public List<Bucket> listBuckets()
- throws Exception {
- return minioClient.listBuckets();
- }
-
- public boolean bucketExists(String bucketName) throws Exception {
- boolean flag = minioClient.bucketExists( BucketExistsArgs.builder().bucket(bucketName).build());
- if (flag) {
- return true;
- }
- return false;
- }
-
- @Override
- public List<String> listBucketNames() throws Exception{
- List<Bucket> bucketList = listBuckets();
- List<String> bucketListName = new ArrayList<>();
- for (Bucket bucket : bucketList) {
- bucketListName.add(bucket.name());
- }
- return bucketListName;
- }
-
- @Override
- public boolean makeBucket(String bucketName) throws Exception{
- boolean flag = this.bucketExists(bucketName);
- if (!flag) {
- minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public boolean removeBucket(String bucketName) throws Exception{
- boolean flag = bucketExists(bucketName);
- if (flag) {
- Iterable<Result<Item>> myObjects = listObjects(bucketName);
- for (Result<Item> result : myObjects) {
- Item item = result.get();
- // 有对象文件,则删除失败
- if (item.size() > 0) {
- return false;
- }
- }
- // 删除存储桶,注意,只有存储桶为空时才能删除成功。
- minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
- flag = bucketExists(bucketName);
- if (!flag) {
- return true;
- }
- }
- return false;
- }
- @Override
- public List<String> listObjectNames(String bucketName) throws Exception{
- List<String> listObjectNames = new ArrayList<>();
- boolean flag = bucketExists(bucketName);
- if (flag) {
- Iterable<Result<Item>> myObjects = listObjects(bucketName);
- for (Result<Item> result : myObjects) {
- Item item = result.get();
- listObjectNames.add(item.objectName());
- }
- }
- return listObjectNames;
- }
-
- public Iterable<Result<Item>> listObjects(String bucketName) throws Exception {
- boolean flag = bucketExists(bucketName);
- if (flag) {
- return minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
- }
- return null;
- }
-
- }

- public class MultipartConfigElement {
- @Bean
- public javax.servlet.MultipartConfigElement multipartConfigElement() {
- MultipartConfigFactory factory = new MultipartConfigFactory();
- factory.setLocation("/home/temp");
- return factory.createMultipartConfig();
- }
-
-
- }
- <dependency>
- <groupId>io.minio</groupId>
- <artifactId>minio</artifactId>
- <version>7.1.0</version>
- </dependency>
- //application.yam文件
- minio:
- accesskey: xxxxxxxxxxxxxxxxxxxxxxx
- secretKey: xxxxxxxxxxxxxxxxxxxxx
- endpoint: http://xxxxxxxx:端口号
- readPath: http://xxxxxxxx:端口号
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。