package com.gkhy.safePlatform.specialWork.service.impl; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import com.gkhy.safePlatform.commons.config.file.MinioConfig; import com.gkhy.safePlatform.commons.enums.E; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.exception.AusinessException; import com.gkhy.safePlatform.commons.utils.StringUtils; import com.gkhy.safePlatform.commons.utils.UUIDUtil; import com.gkhy.safePlatform.commons.vo.ResultVO; import com.gkhy.safePlatform.specialWork.service.SpecialWorkMinoService; import io.minio.GetPresignedObjectUrlArgs; import io.minio.MinioClient; import io.minio.RemoveObjectArgs; import io.minio.RemoveObjectsArgs; import io.minio.errors.*; import io.minio.http.Method; import io.minio.messages.DeleteObject; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.*; @Service public class SpecialWorkMinoServiceImpl implements SpecialWorkMinoService { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private MinioClient minioClient; @Autowired private MinioConfig minioConfig; @Value("${specailworkmino.floders.specialwork}") private String minioFloders; /** * 获取对象上传路径 */ @Override public ResultVO getPresignUrl(String suffixName){ String uuid= UUIDUtil.initUUID(); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String objName = formatter.format(new Date())+"-"+uuid+"."+suffixName; String url = null; Map resMap = new HashMap<>(); resMap.put("fileName",objName); try { Map reqParams = new HashMap<>(); reqParams.put("response-content-type", "application/json"); url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder() .method(Method.PUT) .bucket(minioConfig.getBucketName()) .object(minioFloders+objName) .expiry(60*2) .extraQueryParams(reqParams) .build()); resMap.put("uploadUrl",url); } catch (Exception e) { e.printStackTrace(); } return new ResultVO<>(ResultCodes.OK,resMap); } /** * @description 获取文件下载地址 */ @Override public ResultVO viewFile(String fileName){ String url = null; try { url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder() .method(Method.GET) .bucket(minioConfig.getBucketName()) .object(minioFloders+fileName) .expiry(60*5).build()); } catch (Exception e) { e.printStackTrace(); } url = minioConfig.getUrlPrefix() + url.substring((url.indexOf("//") + 2)).substring(url.substring((url.indexOf("//") + 2)).indexOf( "/")); return new ResultVO(ResultCodes.OK,url); } /** * @description 删除文件 */ @Override public ResultVO deleteFile(String fileName) { try { minioClient.removeObject(RemoveObjectArgs.builder() .bucket(minioConfig.getBucketName()) .object(minioFloders+fileName) .build()); } catch (Exception e) { e.printStackTrace(); } return new ResultVO<>(ResultCodes.OK); } /** * 批量获取文件 */ public String viewFiles(String fileNames){ StringBuffer stringBuffer = new StringBuffer(); if(StringUtils.isNotBlank(fileNames)){ String[] str = fileNames.split(","); for (int i = 0; i < str.length; i++) { String url = null; try { url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder() .method(Method.GET) .bucket(minioConfig.getBucketName()) .object(minioFloders+str[i]) .expiry(60*5).build()); } catch (Exception e) { e.printStackTrace(); } url = minioConfig.getUrlPrefix() + url.substring((url.indexOf("//") + 2)).substring(url.substring((url.indexOf("//") + 2)).indexOf( "/")); stringBuffer.append(url).append(","); } stringBuffer.deleteCharAt(stringBuffer.length() - 1); } return stringBuffer.toString(); } }