| | |
| | | import com.gkhy.exam.common.config.MinioConfig; |
| | | import io.minio.*; |
| | | import io.minio.http.Method; |
| | | import io.minio.messages.DeleteError; |
| | | import io.minio.messages.DeleteObject; |
| | | import io.minio.messages.Item; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.FastByteArrayOutputStream; |
| | |
| | | |
| | | import javax.servlet.ServletOutputStream; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.InputStream; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | @Slf4j |
| | | public class MinioUtils { |
| | | @Autowired |
| | | private MinioClient minioClient; |
| | |
| | | * @return boolean |
| | | */ |
| | | public Boolean bucketExists(String bucketName) { |
| | | Boolean found; |
| | | Boolean found=false; |
| | | try { |
| | | found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | log.error("minio校验bucket失败:{}",e.getMessage()); |
| | | } |
| | | return found; |
| | | } |
| | | |
| | | /** |
| | | * 文件上传 上传完成后请关闭文件流 |
| | | * |
| | | * @param fileName 带后缀的文件名 检验日期yyyyMMdd加16位随机码 |
| | | * @param stream 文件流 要上传文件的流 |
| | | */ |
| | | public String fileUploader( String fileName, InputStream stream) { |
| | | try { |
| | | PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(minioConfig.getBucketName()).object(fileName).stream(stream, stream.available(), -1).contentType("application/octet-stream").build(); |
| | | // 使用putObject上传一个文件到文件分类 |
| | | minioClient.putObject(objectArgs); |
| | | }catch (Exception e) { |
| | | log.error("minio上传文件失败:{}",e.getMessage()); |
| | | return null; |
| | | } |
| | | return fileName; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 文件上传 |
| | |
| | | * @param file 文件 |
| | | * @return Boolean |
| | | */ |
| | | public String upload(MultipartFile file) { |
| | | public String uploadFile(MultipartFile file) { |
| | | String originalFilename = file.getOriginalFilename(); |
| | | if (StringUtils.isBlank(originalFilename)){ |
| | | throw new RuntimeException(); |
| | |
| | | //文件名称相同会覆盖 |
| | | minioClient.putObject(objectArgs); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("minio上传文件失败:{}",e.getMessage()); |
| | | return null; |
| | | } |
| | | return objectName; |
| | |
| | | String url = minioClient.getPresignedObjectUrl(build); |
| | | return url; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("预览文件失败:{}",e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 删除文件 |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public boolean removeFile(String fileName){ |
| | | try { |
| | | RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(minioConfig.getBucketName()) |
| | | .object(fileName).build(); |
| | | minioClient.removeObject(removeObjectArgs); |
| | | return true; |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除文件夹 |
| | | * @param folderName |
| | | * @return |
| | | */ |
| | | public boolean removeFolder(String folderName){ |
| | | try { |
| | | if(!folderName.endsWith("/")){ |
| | | folderName=folderName+"/"; |
| | | } |
| | | ListObjectsArgs listObjectsArgs=ListObjectsArgs.builder().bucket(minioConfig.getBucketName()).prefix(folderName).build(); |
| | | |
| | | Iterable<Result<Item>> results = minioClient.listObjects(listObjectsArgs); |
| | | List<DeleteObject> objectNames=new ArrayList<>(); |
| | | for(Result<Item> result:results){ |
| | | objectNames.add(new DeleteObject(result.get().objectName())); |
| | | } |
| | | if(!objectNames.isEmpty()) { |
| | | RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(minioConfig.getBucketName()) |
| | | .objects(objectNames).build(); |
| | | Iterable<Result<DeleteError>> results1 = minioClient.removeObjects(removeObjectsArgs); |
| | | for (Result<DeleteError> result : results1) { |
| | | DeleteError error = result.get(); |
| | | log.error("Error in deleting object {},{}", error.objectName(), error.message()); |
| | | } |
| | | } |
| | | RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(minioConfig.getBucketName()) |
| | | .object(folderName).build(); |
| | | minioClient.removeObject(removeObjectArgs); |
| | | return true; |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |