Java后端授权阿里云OSS,前端实现文件上传

懒驴 2022年11月16日 2,421次浏览

项目开发中,往往会将资源文件存入到第三方的存储空间,类似于七牛云、阿里云的OSS就是一个项目中常见的文件存储空间,这里将详细介绍阿里云的OSS存储空间。适用常见,后端授权OSS,通过前端直接文件上传。
流程图说明
前期准备:

  • 开通阿里云OSS

  • 登录阿里云主账号,进入控制台,选择 “对象存储 OSS”,找到 “安全令牌(子账号授权)” 点击进入,开始快捷配置
    角色授权1
    角色授权2
    注意:配置完成后会得到 AccessKey ID 和 AccessKey Secret 保存好

  • 获取配置
    控制台-> 管理与治理 -> 访问控制 或者直接输入网址 “https://ram.console.aliyun.com/overview”,选择角色菜单,找到 AliyunOSSTokenGeneratorRole 角色 点击进入,复制基本信息中的RAM

获取配置1
获取配置2

  • 接口测试
    接口测试

直接上代码

1.pom.xml引入
<!--阿里OSS对象存储-->
<dependency>
	<groupId>com.aliyun.oss</groupId>
	<artifactId>aliyun-sdk-oss</artifactId>
	<version>3.8.0</version>
</dependency>

#### 2.AliOssConfig.java ```java import org.springframework.stereotype.Component;

/***

  • 阿里云OSS的配置信息类
    */
    @Component
    public class AliOssConfig {
    public static String endpoint="https://oss-cn-chengdu.aliyuncs.com";

    public static String accessKeyId="自己的KeyID";

    public static String accessKeySecret="自己的KeySecret";

    public static String bucketName="自己的空间名称";

    public static String path;

    //直传地址,格式为 bucketName.endpoint (Bucket域名)
    public final static String host = "https://lazylvfile.oss-cn-chengdu.aliyuncs.com";

    /*

    • ============= 配置上传过期时间、大小等等 =========
      /
      /
      *
    • 上传截止时间(秒)
      */
      public final static long expireTime = 30;

    /**

    • 上传文件最小(字节)
      /
      public final static long min = 0;
      /
      *
    • 上传文件最大(字节)
      */
      public final static long max = 1048576000;

    /**

    • 上传文件的前缀、可忽略
      */
      public final static String dir = "";

    /**上传文件的路径/
    //1 用户头像存放的路径 ,自己的路径
    public static String head_images="head_images/";
    //...... 等等

    //阿里云资源图片的访问头
    public static String imgHttpHead="阿里云的域名或者绑定自己的域名";

}


##### 3.具体的java详情代码
```java
OSS client = new OSSClientBuilder().build(AliOssConfig.endpoint, AliOssConfig.accessKeyId, AliOssConfig.accessKeySecret);
// 直传有效截止时间
long expireEndTime = System.currentTimeMillis() + (AliOssConfig.expireTime * 1000);
Date expiration = new Date(expireEndTime);
PolicyConditions policyConditions = new PolicyConditions();
// 设置可上传文件的大小
policyConditions.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, AliOssConfig.min, AliOssConfig.max);
// 设置上传文件的前缀、可忽略
policyConditions.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, AliOssConfig.dir);
// 生成policy
String postPolicy = client.generatePostPolicy(expiration, policyConditions);
byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8);
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = client.calculatePostSignature(postPolicy);
// 封装policy等信息
AliOssPolicy aliOssPolicy = new AliOssPolicy();
aliOssPolicy.setOssAccessKeyId(AliOssConfig.accessKeyId);
aliOssPolicy.setPolicy(encodedPolicy);
aliOssPolicy.setSignature(postSignature);
if(pram.getOssType()==1){
	aliOssPolicy.setDir(AliOssConfig.head_images);
}
aliOssPolicy.setHost(AliOssConfig.host);
aliOssPolicy.setExpire(String.valueOf(expireEndTime / 1000));
aliOssPolicy.setImgHttpHead(AliOssConfig.imgHttpHead);
Map<String, Object> map=new HashMap<>();
map.put("ossSign", aliOssPolicy);
//返回给前端,前端调起直接文件上传到OSS
return map;