阿里云OSS文件上传

引入依赖

<dependency>
   <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.6.0</version>
</dependency>

封装获取OSSClient对象工具类

@Component
public class OssClientUtil {

    private volatile static OSSClient client;

    private static String endpoint;
    private static String accessKeyId;
    private static String accessKeySecret;

    /**
     * 设置阿里云oss的Endpoint
     * @param endpoint  http://oss-cn-chengdu.aliyuncs.com
     */
    @Value("${aliyun.oss.endpoint}")
    public void setEndpoint(String endpoint) {
        OssClientUtil.endpoint = endpoint;
    }

    /**
     * 设置阿里云oss的accessKeyId
     * @param accessKeyId  LTAI4G6PHtKmhXCQECLd5uVk
     */
    @Value("${aliyun.oss.accessKeyId}")
    public void setAccessKeyId(String accessKeyId) {
        OssClientUtil.accessKeyId = accessKeyId;
    }

    /**
     * 设置阿里云oss的accessKeySecret
     * @param accessKeySecret  FEH56pV2dZsEjS8RcJsPMY6ES2W4DB
     */
    @Value("${aliyun.oss.accessKeySecret}")
    public void setAccessKeySecret(String accessKeySecret) {
        OssClientUtil.accessKeySecret = accessKeySecret;
    }

    /**
     * 私有无参构造,阻止通过new创建对象
     */
    private OssClientUtil(){}

    /**
     * 双重校验
     * @return
     */
    public static OSSClient getOssClient(){
        if (client == null) {
            synchronized (OssClientUtil.class){
                if (client == null) {
                    //client = new OSSClient(endpoint, accessKeyId, accessKeySecret,getDefalutClientConfig());
                    client = new OSSClient(endpoint,getCredentialsProvider(),getDefalutClientConfig());
                }
            }
        }
        return  client;
    }

    /**
     * 关闭OSSClient,关闭后必须重新启动才能使用
     */
    public static void shutdown(){
        if(null != client){
            client.shutdown();
            client = null;
        }
    }


    /*  -----------------------------------------  配置 ----------------------------------------- */

    /**
     * 提供身份凭证
     * @return
     */
    private static CredentialsProvider getCredentialsProvider(){
        return new DefaultCredentialProvider(accessKeyId,accessKeySecret);
    }

    private static ClientConfiguration getDefalutClientConfig(){
        // 创建ClientConfiguration。ClientConfiguration是OSSClient的配置类,可配置代理、连接超时、最大连接数等参数。
        ClientConfiguration conf = new ClientConfiguration();

        // 设置OSSClient允许打开的最大HTTP连接数,默认为1024个。
        conf.setMaxConnections(200);
        // 设置Socket层传输数据的超时时间,默认为50000毫秒。
        conf.setSocketTimeout(50000);
        // 设置建立连接的超时时间,默认为50000毫秒。
        conf.setConnectionTimeout(50000);
        // 设置从连接池中获取连接的超时时间(单位:毫秒),默认不超时。
        conf.setConnectionRequestTimeout(2000);
        // 设置连接空闲超时时间。超时则关闭连接,默认为60000毫秒。
        conf.setIdleConnectionTime(60000);
        // 设置失败请求重试次数,默认为3次。
        conf.setMaxErrorRetry(5);
        // 设置是否支持将自定义域名作为Endpoint,默认支持。
        conf.setSupportCname(true);
        // 设置连接OSS所使用的协议(HTTP/HTTPS),默认为HTTP。
        conf.setProtocol(Protocol.HTTP);
        return conf;
    }

}

文件上传工具类

@Component
public class ALiYunUpload {

    @Value("${aliyun.oss.bucketName}")
    private String bucketName;

    /**
     * 上传接收的文件到阿里云
     * @param file
     * @return
     */
    public Map<String,Object> addFile(MultipartFile file) {
        //获取存到aliyun
        String urls="";
        InputStream inputStream = null;
        Map<String,Object> map = new HashMap<>();
        try {
            if(!file.isEmpty()) {
                inputStream = file.getInputStream();
                //365天有效
                Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 2);
                String fileName = file.getOriginalFilename();
                String suffix = fileName.substring(fileName.lastIndexOf("."));
                String key = UUID.randomUUID().toString() + suffix;
                System.out.println(expiration);
                map.put("fileName",key);
                // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
                URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, key, expiration);
                System.out.println("图片访问地址" + url);
                PutObjectResult putObject = OssClientUtil.getOssClient().putObject(bucketName, key, inputStream);

                if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
                    return null;
                }
                if(StringUtils.isEmpty(urls)) {
                    urls = url.toString();
                }else {
                    urls=urls+"&&"+url;
                }
                map.put("url",urls);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return map;
    }


    /**
     * 删除文件
     * @param key
     * @return
     */
    public boolean delFile(String key) {
        OssClientUtil.getOssClient().deleteObject(bucketName,key);
        return true;
    }


    public Map<String,Object> addByte(byte[] data,String fileName) {
        //获取存到aliyun
        String urls="";
        Map<String,Object> map = new HashMap<>();
        //365天有效
        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365);
        map.put("fileName",fileName);
        String suffix = ".jpg";
        String key = UUID.randomUUID().toString() + suffix;
        System.out.println(expiration);
        // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
        URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, key, expiration);
        System.out.println("图片访问地址" + url);
        OSSClient ossClient = OssClientUtil.getOssClient();
        //上传Byte数组。
        PutObjectResult putObject = ossClient.putObject(bucketName, key, new ByteArrayInputStream(data));
        if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
            return null;
        }
        if(StringUtils.isEmpty(urls)) {
            urls = url.toString();
        }else {
            urls=urls+"&&"+url;
        }
        map.put("url",urls);
        map.put("uuid",key);
        return map;
    }

    /**
     * 用于excel导入
     * @param data
     * @return
     */
    public Map<String,Object> addExcel(byte[] data) {
        //获取存到aliyun
        String urls="";
        Map<String,Object> map = new HashMap<>();
        //365天有效
        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365);
        String suffix = ".jpg";
        String key = UUID.randomUUID().toString() + suffix;
        System.out.println(expiration);
        // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
        URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, key, expiration);
        System.out.println("图片访问地址" + url);
        OSSClient ossClient = OssClientUtil.getOssClient();
        //上传Byte数组。
        PutObjectResult putObject = ossClient.putObject(bucketName, key, new ByteArrayInputStream(data));
        if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
            return null;
        }
        if(StringUtils.isEmpty(urls)) {
            urls = url.toString();
        }else {
            urls=urls+"&&"+url;
        }
        map.put("url",urls);
        map.put("uuid",key);
        return map;
    }

    public Map<String,Object> addFileApp(MultipartFile file) {
        //获取存到aliyun
        String urls="";
        InputStream inputStream = null;

        Map<String,Object> map = new HashMap<>();
        try {
            if(!file.isEmpty()) {
                inputStream = file.getInputStream();
                //365天有效
                Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
                String fileName =file.getOriginalFilename();
//                String suffix = fileName.substring(fileName.lastIndexOf("."));
//                String key = UUID.randomUUID().toString() + suffix;
//                System.out.println(expiration);
                map.put("fileName",fileName);
                // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
                URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, fileName, expiration);
                System.out.println("图片访问地址" + url);
                PutObjectResult putObject = OssClientUtil.getOssClient().putObject(bucketName, fileName, inputStream);

                if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
                    return null;
                }
                if(StringUtils.isEmpty(urls)) {
                    urls = url.toString();
                }else {
                    urls=urls+"&&"+url;
                }
                map.put("url",urls);
//                map.put("uuid",key);

            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return map;
    }

    /**
     * 阿里云上传
     * @param file
     * * @param folder 文件夹及名称
     * @return
     */
    public Map<String,Object> addPhotoFile(MultipartFile[] file,String folder) {
        //获取存到aliyun
        StringBuilder urls= new StringBuilder();
        InputStream inputStream = null;
        Map<String,Object> map = new HashMap<>();
        try {
            for (int i = 0;i<file.length;i++){
                if(!file[i].isEmpty()) {
                    inputStream = file[i].getInputStream();
                    //1年有效
                    Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 30);
                    // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
                    String path = folder+TimeUtil.dateToStr(new Date())+"/"+UUIDUtils.get32UUID() + ".jpg";
                    URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, path, expiration);
                    PutObjectResult putObject = OssClientUtil.getOssClient().putObject(bucketName, path, inputStream);
                    if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
                        return null;
                    }
                    urls.append(url.toString());
                    if(i<file.length-1){
                        urls.append(",");
                    }
                }
            }
            map.put("url", urls.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return map;
    }

    /**
     * 阿里云pdf上传
     * @param file
     * @return
     */
    public Map<String,Object> addPdfFile(MultipartFile file,String folder) {
        //获取存到aliyun
        String urls = "";
        InputStream inputStream = null;
        Map<String, Object> map = new HashMap<>();
        try {
            if (!file.isEmpty()) {
                inputStream = file.getInputStream();
                //1年有效
                Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 30);
                //文件名
                String fileName = System.currentTimeMillis() + "-" + UUIDUtils.get8UUID() + ".pdf";
                map.put("fileName", fileName);
                String pathAndName = folder+ TimeUtil.dateToStr(new Date())+"/"+fileName;
                // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
                URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, pathAndName, expiration);
                PutObjectResult putObject = OssClientUtil.getOssClient().putObject(bucketName, pathAndName, inputStream);
                if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
                    return null;
                }
                if (StringUtils.isEmpty(urls)) {
                    urls = url.toString();
                } else {
                    urls = urls + "&&" + url;
                }
                map.put("url", urls);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return map;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值