阿里云OSS配置及使用

1 篇文章 0 订阅

.xml引用

        <!-- OSS SDK 相关依赖 -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.8.1</version>
        </dependency>

.yml配置

# OSS相关配置信息 (OSS官网配置信息)
aliyun:
  oss:
    endpoint: http://oss-cn-hangzhou.aliyuncs.com # oss对外服务的访问域名
    url: https://**.oss-cn-hangzhou.aliyuncs.com/
    accessKeyId: *** # 访问身份验证中用到用户标识
    accessKeySecret: *** # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
    bucketName: **
  env: dev
阿里云 OSS 配置信息:
package com.config;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.Serializable;

/**
 * @Author FangYN
 * @Date 2020/10/9 14:25
 * @Description 阿里云 OSS 配置信息
 **/
@Data
@Configuration
public class OSSConfig implements Serializable {
    private static final long serialVersionUID = -119396871324982279L;

    /**
     * 阿里云 oss 站点
     */
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;

    /**
     * 阿里云 oss 资源访问 url
     */
    @Value("${aliyun.oss.url}")
    private String url;

    /**
     * 阿里云 oss 公钥
     */
    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;

    /**
     * 阿里云 oss 私钥
     */
    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;

    /**
     * 阿里云 oss 文件根目录
     */
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;

    /**
     * 环境
     */
    @Value("${aliyun.env}")
    private String env;

    @Bean("oss")
    public OSS initOssClient() {
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        return ossClient;
    }

//    /**
//     * @param keyName 文件名
//     * @return oss获取文件下载路径
//     */
//    public URL getUrl(String keyName) {
//        OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
//        // 设置URL过期时间为1小时
//        Date expiration = new Date(new Date().getTime() + 3600 * 10000);
//        // 生成URL
//        URL url = client.generatePresignedUrl(bucketName, packApk + keyName, expiration);
//        return url;
//    }
}
阿里云 oss 上传工具类:
package com.util;

import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.PutObjectResult;
import com.common.util.UUIDUtils;
import com.config.OSSConfig;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;

/**
 * @Author FangYN
 * @Date 2020/10/9 14:24
 * @Description 阿里云 oss 上传工具类
 **/
public class OSSUtil {

    private OSSUtil() {
    }

    /**
     * oss 工具客户端
     */
    private volatile static OSSClient ossClient = null;

    /**
     * 上传文件至阿里云 OSS
     * 文件上传成功,返回文件完整访问路径
     * 文件上传失败,返回 null
     *
     * @param ossConfig oss 配置信息
     * @param file      待上传文件
     * @param fileDir   文件保存目录
     * @param fileName  文件重命名(文件后缀需要带)
     * @return oss 中的相对文件路径
     */
    public static String upload(OSSConfig ossConfig, MultipartFile file, String fileDir, String fileName) throws IOException {
        initOSS(ossConfig);
        StringBuilder fileUrl = new StringBuilder();
        InputStream ins = null;
        try {
            if (ObjectUtils.isEmpty(fileName)) {
                String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.'));
                fileName = System.currentTimeMillis() + "-" + UUIDUtils.getUUID().substring(0, 18) + suffix;
            }
            if (!fileDir.endsWith("/")) fileDir = fileDir.concat("/");
            fileUrl = fileUrl.append(ossConfig.getEnv().concat("/") + fileDir + fileName);
            ossClient.setBucketAcl(ossConfig.getBucketName(), CannedAccessControlList.PublicRead);
            ins = file.getInputStream();
            PutObjectResult result = ossClient.putObject(ossConfig.getBucketName(), fileUrl.toString(), ins);
            ins.close();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        } finally {
            if (ins != null) ins.close();
        }
        fileUrl = fileUrl.insert(0, ossConfig.getUrl());
        return fileUrl.toString();
    }

    /**
     * @param ossConfig oss信息
     * @return 初始化 oss 客户端
     */
    private static OSSClient initOSS(OSSConfig ossConfig) {
        if (ossClient == null) {
            synchronized (OSSUtil.class) {
                if (ossClient == null) {
                    ossClient = new OSSClient(ossConfig.getEndpoint(),
                            new DefaultCredentialProvider(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()),
                            new ClientConfiguration());
                }
            }
        }
        return ossClient;
    }

    /**
     * @param keyName 存放路径+文件名
     * @return      oss获取文件下载路径
     */
    public static URL getUrl(String keyName, OSSConfig ossConfig) {
        initOSS(ossConfig);
        Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);// 设置URL过期时间为10年
        URL url = ossClient.generatePresignedUrl(ossConfig.getBucketName(), keyName, expiration);// 生成URL
        return url;
    }

}

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值