OSS与Java结合

1. 开通oss服务

在这里插入图片描述
创建 AccessKey
在这里插入图片描述
在这里插入图片描述
获取 连接的accessKey
在这里插入图片描述

2. 使用java 操作阿里云oss

  1. 创建一个java项目maven 版本
    导入所需的必须jar包(这里我没有写版本)
     <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
        </dependency>
  1. 进行相关属性的配置
    在这里插入图片描述
    aliyun.oss.file.endpoint
    aliyun.oss.file.keyid
    aliyun.oss.file.keysecret
    aliyun.oss.file.bucketname
    以上四个属性都是在阿里云中,复制下来就可
  2. 创建启动类,启动项目
    在这里插入图片描述没有数据源,因为我们只是上传文件,不需要数据源即数据库
  • 解决方法:
    1. 添加数据源即数据库配置文件
    2. 在启动类添加属性,默认不加载数据库的配置
      在这里插入图片描述
      重新启动 成功
      在这里插入图片描述

2.1 从配置文件中获取相对应的属性值


  1. 使用注解@Value("${aliyun.oss.file.endpoint}")可以直接拿到配置文件的属性值
  2. 给类上加注解@component 将类交给spring管理
  3. 继承InitializingBean类,在工程启动spring进行加载的时候就会执行该类
  4. 在类中创建出公共的静态属性,可以直接类名点 属性名进行取值
//项目一启动 spring中的接口 spring加载后,执行接口中的方法
@Component
public class ConstantPropertiesUtils implements InitializingBean {
    //读取配置文件
    @Value("${aliyun.oss.file.endpoint}")
    private  String endpoint;
    @Value("${aliyun.oss.file.keyid}")
    private  String keyid;
    @Value("${aliyun.oss.file.keysecret}")
    private  String keysecret;
    @Value("${aliyun.oss.file.bucketname}")
    private  String bucketname;



    public  static String  END_POINT;
    public  static String  KEY_ID;
    public  static String  KEY_SERRCT;
    public  static String  BUCKET_NAME;


    //这个方法在上面的值初始化完成后,就会执行
    @Override
    public void afterPropertiesSet() throws Exception {
             END_POINT=this.endpoint;
             KEY_ID=this.keyid;
             KEY_SERRCT=this.keysecret;
             BUCKET_NAME=this.bucketname;
    }
}

2.2 创建controller 写入阿里上传逻辑

 @Override
    public String uploadFileAvatar(MultipartFile file) {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = ConstantPropertiesUtils.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantPropertiesUtils.KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.KEY_SERRCT;
        String bucketname = ConstantPropertiesUtils.BUCKET_NAME;
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

             // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            InputStream inputStream = file.getInputStream();

            //获取文件名称
            String fileName = file.getOriginalFilename();
            // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
            //第一个参数 buchet的名称
            //第二个参数 上传oss文件的路径和名称   /aa/bb/c.jpg
            //第三个参数 上传文件的输入流
            ossClient.putObject(bucketname, fileName, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();

            //把上传之后的文件路径返回
            //需要把上传到阿里云oss路径手动拼接出来
            String url="https://"+bucketname+"."+endpoint+"/"+fileName;
            return url;
        }catch (Exception e){
            System.out.println("上传文件出现异常");
            return null;
        }
    }

结果:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.3 遇到的问题:

  1. 多次上传同一个文件,后上传的文件会将前面上传的文件进行覆盖
    解决: 只需要将文件名字每次设置为不同即可
    在这里插入图片描述

2.4 将上传的文件按照上传日期进行分类

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值