21.Minio文件下载工具类

import com.alibaba.fastjson.JSONObject;
import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import org.apache.commons.lang3.StringUtils;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;

public class MinioUtil {

    /**
     * @param bucketName    桶名称
     * @param expirationDay 连接时效性
     * @param inputStream   文件流
     * @param folderName    文件夹名称
     * @param fileSuffix    文件后缀名
     * @Description: 上传文件
     */
    public static JSONObject uploadFile(MinioClient minioClient, String bucketName, String expirationDay, InputStream inputStream,
                                        String contentType, String folderName, String fileSuffix, String minioOpenSoueces) throws Exception {
        return upload(minioClient, bucketName, expirationDay, inputStream, folderName, fileSuffix, contentType, minioOpenSoueces);
    }


    /**
     * @param bucketName    桶名称
     * @param expirationDay 连接时效性
     * @param str           长文本
     * @param folderName    文件夹名称
     * @Description: 上传字符串大文本内容
     */
    public static JSONObject uploadString(MinioClient minioClient, String bucketName, String expirationDay,
                                          String str, String folderName, String minioOpenSoueces) throws Exception {
        if (StringUtils.isEmpty(str)) {
            return new JSONObject();
        }
        InputStream inputStream = new ByteArrayInputStream(str.getBytes());
        return upload(minioClient, bucketName, expirationDay, inputStream, folderName, null, "text/html", minioOpenSoueces);
    }


    /**
     * @param bucketName    桶名称
     * @param expirationDay 连接时效性
     * @param inputStream   文件流
     * @param folderName    文件夹名称
     * @param fileSuffix    文件后缀名
     * @Description: 上传主功能
     */
    private static JSONObject upload(MinioClient minioClient, String bucketName, String expirationDay, InputStream inputStream,
                                     String folderName, String fileSuffix, String contentType, String minioOpenSoueces) throws Exception {
        JSONObject map = new JSONObject();
        // 验证名称为bucketName的bucket是否存在,不存在则创建
        if (!minioClient.bucketExists(bucketName)) {
            minioClient.makeBucket(bucketName);
        }
        if (!StringUtils.isBlank(minioOpenSoueces)) {
            List<String> list = Arrays.asList(minioOpenSoueces.split(","));
            setBucketPolicy(minioClient, bucketName, list);
        }
        String fileName = UUID.randomUUID().toString() + "." + fileSuffix;
        //不确定文件大小传-1
        long objectSize = -1L;
        //最大上传限制5G
        long partSize = 5368709120L;
        PutObjectOptions options = new PutObjectOptions(objectSize, partSize);
        options.setContentType(contentType);
        minioClient.putObject(bucketName, folderName + "/" + fileName, inputStream, options);
        String url = getMinioUrl(minioClient, bucketName, expirationDay, folderName, fileName, minioOpenSoueces);
        map.put("flag", "0");
        map.put("mess", "上传成功");
        map.put("url", url);
        map.put("path", folderName + "/" + fileName);
        return map;
    }

    /**
     * @param bucketName    桶名称
     * @param expirationDay 连接时效性
     * @param folderName    文件夹名称
     * @param fileName      文件名
     */
    public static String getMinioUrl(MinioClient minioClient, String bucketName, String expirationDay,
                                     String folderName, String fileName, String minioOpenSoueces) throws Exception {
        int parseInt = Integer.parseInt(expirationDay);
        int seconds = 60 * 60 * 24 * parseInt;
        boolean isopen = false;
        if (!StringUtils.isBlank(minioOpenSoueces)) {
            for (String openPath : minioOpenSoueces.split(",")) {
                if (folderName.contains(openPath)) {
                    isopen = true;
                    break;
                }
            }
        }
        if (isopen) {
            return minioClient.getObjectUrl(bucketName, folderName + "/" + fileName);
        }
        return minioClient.presignedGetObject(bucketName, folderName + "/" + fileName, seconds);
    }

    private static void setBucketPolicy(MinioClient minioClient, String bucketName, List<String> openPaths) throws Exception {
        StringBuilder openUrl = new StringBuilder();
        for (String string : openPaths) {
            openUrl.append("                  \"arn:aws:s3:::").append(bucketName).append("/").append(string).append("*\",\n");
        }
        String substring = openUrl.substring(0, openUrl.lastIndexOf(",")) + "\n";
        String policy = "{\n" +
                "    \"Statement\": [\n" +
                "        {\n" +
                "            \"Action\": [\n" +
                "                \"s3:GetBucketLocation\"\n" +
                "            ],\n" +
                "            \"Effect\": \"Allow\",\n" +
                "            \"Principal\": \"*\",\n" +
                "            \"Resource\": \"arn:aws:s3:::" + bucketName + "\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"Action\": \"s3:GetObject\",\n" +
                "            \"Effect\": \"Allow\",\n" +
                "            \"Principal\": \"*\",\n" +
                "            \"Resource\": [\n" +
                substring +
                "              ]\n" +
                "        }\n" +
                "    ],\n" +
                "    \"Version\": \"2012-10-17\"\n" +
                "}\n";
        minioClient.setBucketPolicy(bucketName, policy);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值