阿里云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测试 

相关推荐

  1. 阿里对象存储OSS)服务

    2024-03-24 04:12:01       61 阅读
  2. 阿里 OSS桶对象存储攻防

    2024-03-24 04:12:01       22 阅读
  3. SpringBoot中实现阿里OSS对象存储

    2024-03-24 04:12:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 04:12:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 04:12:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 04:12:01       82 阅读
  4. Python语言-面向对象

    2024-03-24 04:12:01       91 阅读

热门阅读

  1. 输出一周的每天

    2024-03-24 04:12:01       35 阅读
  2. 面试算法-80-字符串相乘

    2024-03-24 04:12:01       33 阅读
  3. docker基础(六)之docker create和docker exec

    2024-03-24 04:12:01       36 阅读
  4. Android 车联网——CarWatchdogService介绍(二十)

    2024-03-24 04:12:01       42 阅读
  5. 网络安全威胁

    2024-03-24 04:12:01       45 阅读
  6. 【计算机原理】计算机原理学习入门要点

    2024-03-24 04:12:01       32 阅读
  7. 【leetcode热题】打家劫舍

    2024-03-24 04:12:01       39 阅读
  8. C++_第四周做题总结

    2024-03-24 04:12:01       35 阅读
  9. i2c-tools基本用法

    2024-03-24 04:12:01       41 阅读
  10. 【C++之string类】

    2024-03-24 04:12:01       33 阅读
  11. 《原型模式(极简c++)》

    2024-03-24 04:12:01       56 阅读
  12. os.path模块(二)

    2024-03-24 04:12:01       39 阅读