阿里云OSS分布式存储

目录

🧂1.OSS开通 

🌭2.头像上传整合OSS 

🚍2.1.引入依赖

🚍2.2添加配置

🚍2.3创建配置类

🚍2.4添加实现类 

🚍2.5controller调用接口 

🚍2.6postman测试 


 1.OSS开通 

  • 1.登录阿里云,搜索oss

  • 2.创建bucket 

RAM权限:

  • 阿里云用于各个产品的权限,基于RBAC模型,进行简单管理账号、统一分配权限、集中管控资源,从而建立安全、完善的资源控制体系。
  • 众多产品,一般采用子账号进行分配权限,防止越权攻击

  • 3.创建用户,为其分配权限
  •  4.确定之后发送验证码

  • 5.获取AccessKey ID  ,AccessKey Secret;只出现一次,务必粘贴复制

  • 6. 按需添加权限 

2.头像上传整合OSS 

官方参考文档:OSS官网手册

2.1.引入依赖

            <!--阿里云OSS-->
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>3.15.1</version>
            </dependency>

2.2添加配置

yml文件没有提示,不要考虑是不是错了

#阿里云OSS
aliyun:
  oss:
    #地域节点
    endpoint: 
    access-key-id: 
    access-key-Secret: 
    bucket-name: hqdmdxz-user

2.3创建配置类

创建配置类,获取yml中的文件配置,注意@Value注解的使用

@Data
@Configuration
public class OssConfig {

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.access-key-id}")
    private String accessKeyId;
    @Value("${aliyun.oss.access-key-Secret}")
    private String accessKeySecret;
    @Value("${aliyun.oss.bucket-name}")
    private String bucketName;
}

2.4添加实现类 

  • 先上传文件,返回url地址,再和普通表单一并提交(推荐这种,更加灵活,失败率低)
  • 文件和普通表单一并提交(设计流程比较多,容易超时和失败)

注意:默认SpringBoot最大文件上传是1M,大家测试的时候注意一下

@Slf4j
@Service
public class FileServiceImpl implements FileService {


    @Autowired
    private OssConfig ossConfig;

    /**
     * 上传头像
     *
     * @param file
     * @return
     */
    @Override
    public String uploadUserImage(MultipartFile file) {
        //1.获取相关配置
        String bucketName = ossConfig.getBucketName();
        String endpoint = ossConfig.getEndpoint();
        String accessKeyId = ossConfig.getAccessKeyId();
        String accessKeySecret = ossConfig.getAccessKeySecret();
        //2.创建oss对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        //3.获取原始文件名
        String originalFilename = file.getOriginalFilename();
        //4.获取当前时间
        LocalDateTime nowTime = LocalDateTime.now();
        //5.格式化的模板
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        //6.将当前日期格式化
        String formatTime = dateTimeFormatter.format(nowTime);
        //7.获取uuid
        String uuid = CommonUtil.generateUUID();
        //8.获取文件后缀.jpg
        String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
        //9.拼装路径oos存储路径  user/2024/03/22/2131241215.jpg
        String fileName = "user/" + formatTime + "/" + uuid + extension;

        try {
            //10.上传到oss
            PutObjectResult putObjectResult = ossClient.putObject(bucketName, fileName, file.getInputStream());
            //11.返回拼装路径
            if (putObjectResult != null) {
                String imageUrl = "https://" + bucketName + "." + endpoint + "/" + fileName;
                return imageUrl;
            }
        } catch (IOException e) {
            log.error("文件上传失败:{}", e);
        } finally {
            //oss关闭,避免内存泄露
            ossClient.shutdown();
        }
        return null;
    }
}

2.5controller调用接口 

上传文件,调用接口实现类,返回图片地址

    @Autowired
    private FileService fileService;

    /**
     * 上传头像
     *
     * @return
     */
    @ApiOperation("头像上传")
    @PostMapping("/upload")
    public JsonData uploadUserImage(
            @ApiParam(value = "文件上传", required = true)
            @RequestPart("file") MultipartFile file) {

        String imageUrl = fileService.uploadUserImage(file);

        if (imageUrl != null) {
            return JsonData.buildSuccess(imageUrl);
        }
        return JsonData.buildResult(CodeEnum.FILE_UPLOAD_USER_IMAGE_ERROR);
    }

2.6postman测试 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会敲代码的小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值