springboot整合阿里云对象存储oss

知识梳理:

今天要学的知识很实用,一个合格的项目里面肯定会用到这个技术,那就是文件上传,文件上传可以帮我们上传头像、excel表格。等,用过文件上传的小伙伴都是文件上传到哪里去呢?本人第一次上传文件是上传到项目的某个文件夹里面或者数据库里面进行储存,这样很不友好,最大的问题是一旦文件多了就很占内存,今天就来学习一下阿里云提供的对象存储oss,阿里云地址是:https://www.aliyun.com/


准备工作:

  1. 注册阿里云账号
  2. 开通对象存储OSS服务
  3. 获取AccessKey
  4. 创建Bucket 列表

第一步:创建Bucket 列表,创建的时候参数可以跟我选一样,看个人
在这里插入图片描述

第二步:获取AccessKey
在这里插入图片描述

第三步:引入依赖

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

第四步:在项目配置文件中配置秘钥,第一个参数是你 地域节点 第二和第三参数是秘钥 第四参数是你创建的Bucket名称

#阿里云oss密钥
aliyun:
  oss:
    endpoint: oss-cn-beijing.aliyuncs.com
    accessKeyId: 
    secret: 
    bucket: 

第五步:初始化,读取配置参数

@Component
public class ConstantOssPropertiesUtils implements InitializingBean {

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

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

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

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

    public static String EDNPOINT;
    public static String ACCESS_KEY_ID;
    public static String SECRECT;
    public static String BUCKET;

    @Override
    public void afterPropertiesSet() throws Exception {
        EDNPOINT=endpoint;
        ACCESS_KEY_ID=accessKeyId;
        SECRECT=secret;
        BUCKET=bucket;
    }
}

第六步:编写具体的实现,这里的id是后来加的,因为当时只顾着上传的,以后加了用户头像上传,这个的id是表示那个用户,也可以不加id也能上传
ps:MultipartFile,接收用户上传的头像

 /**
     * 用户上传的头像
     * @param file id
     * @return
     */
    @PostMapping("/uploadAvatar/{id}")
    public R uploadAvatar(MultipartFile file,@PathVariable Integer id){
        return userService.uploadAvatar(file,id);
    }

第七步:直接看业务层具体代码

	@Override
    public R uploadAvatar(MultipartFile file,Integer id) {
    	//设置相关参数
        String ednpoint = ConstantOssPropertiesUtils.EDNPOINT;
        String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret= ConstantOssPropertiesUtils.SECRECT;
        String bucketName = ConstantOssPropertiesUtils.BUCKET;

        if(file.isEmpty()){
            return R.error("上传的文件不能为空");
        }
        //上传文件流
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(ednpoint, accessKeyId, accessKeySecret);
            InputStream inputStream = file.getInputStream();
            String fileName=file.getOriginalFilename();
            //生成随机唯一值,使用uuid,添加到文件名称里面
            String uuid= UUID.randomUUID().toString().replace("-","");
            fileName=uuid+fileName;

            //按照当前日期,创建文件夹,上传到创建文件夹里面
            //   /2021/02/02/ 01.jpg
            String timeUrl = new DateTime().toString("yyyy/MM/dd");
            fileName=timeUrl+"/"+fileName;
            //调用方法实现上传
            //1.JPG
            ossClient.putObject(bucketName,fileName,inputStream);
            //关闭ossClient
            ossClient.shutdown();
            //https://xxxxx.oss-cn-beijing.aliyuncs.com/01.png
            //上传后路径
            String url="https://"+bucketName+"."+ednpoint+"/"+fileName;
            User user=new User();
            user.setId(id);
            user.setUrl(url);
            this.updateById(user);	//上传后修改数据原来的头像路径
            return R.ok(url);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }

上传之前:Bucket里面最开始是没有图片的,数据库可以没有路径,还没有上传,
在这里插入图片描述
在这里插入图片描述

选择图片:我就上传这个1.jpg这个图片
在这里插入图片描述

上传图片:我只用swagger-ui进行上传,已经上传成功了,数据库也存了图片的路径,用路径能直接下载图片
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值