springboot整合阿里云oss实现简单的增删改查

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: springboot与阿里云oss简单使用

最近写练习的时候要用到文件的增删改查操作,听oss对象存储特别牛逼,我就想试一下。我去了华为云和阿里云看了一下价格,感觉还是阿里云的比较便宜,腾讯云就不考虑了,因为腾讯封了我的qq号,我的武则天都玩不了。首先我去看了一下文档,我靠,我发现我的水平有些低,感觉迷茫。我想我不如去csdn上找一个来抄了,于是想罢我就在csdn搜索栏里输入了springboot oss,

image.png于是出来了这,然后我就看了第一个,好,点开看看,首先看了他的文章,明白了他的思路:

1.就是将阿里云依赖导入

2.然后用表单将文件提交到java服务器端

3.用文件上传方法上传

image.png

我看了一下大概思路就这些,我就想着不如直接抄。

1.首先我们创建一个项目添加如下依赖

image.png

因为我这里采用的是java11版本所以使用这个依赖,和照着抄的文章还是有点区别

2.在配置文件中添加下面配置

image.png

这里需要注意的是与原文对比需要配置上传文件大小,因为springboot默认配置太小,容易报错。

accesskey和Accesssecret在这里按照提示配置即可,但要注意阿里云的提醒账号创建权限赋予问题(没有权限一样会报错):

image.png

bucket在这里配置:

image.png

3.将配置文件的oss信息,读取并自动封装成实体类

image.png

4.具体上传和删除方法

与原文不同的是这里使用这个方法

image.png

业务代码如下:

 @Autowired
    private ConstantProperties constantProperties;
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    /**
     * 上传
     * @param file
     * @return
     */
    public  String upload(InputStream file,String name){
        String endpoint= constantProperties.getEndpoint();
        String accessKeyId= constantProperties.getKeyid();
        String accessKeySecret=constantProperties.getKeysecret();
        String bucketName=constantProperties.getBucketname();
        String fileHost=constantProperties.getFilehost();
        System.out.println(endpoint+"endpoint");
        String dateStr = format.format(new Date());
        if(null == file){
            return null;
        }
        OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
        try {
            //容器不存在,就创建
            if(! ossClient.doesBucketExist(bucketName)){
                ossClient.createBucket(bucketName);
                CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
                ossClient.createBucket(createBucketRequest);
            }
            //创建文件路径
            String fileUrl = fileHost+"/"+(dateStr + "/" + UUID.randomUUID().toString().replace("-","")+"-"+name);
            //上传文件
            PutObjectResult result = ossClient.putObject(bucketName, fileUrl, file);
            //设置权限 这里是公开读
            ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead);
            if(null != result){
                return fileUrl;
            }
        }catch (OSSException oe){
            System.out.println(oe.getMessage());
        }catch (ClientException ce){
            System.out.println(ce.getMessage());
        }finally {
            //关闭
            ossClient.shutdown();
        }
        return null;
    }
    /**
     * 删除
     * @param fileKey
     * @return
     */
    public  String deleteBlog(String fileKey){
        String endpoint= constantProperties.getEndpoint();
        String accessKeyId= constantProperties.getKeyid();
        String accessKeySecret=constantProperties.getKeysecret();
        String bucketName=constantProperties.getBucketname();
        String fileHost=constantProperties.getFilehost();
        try {
            OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
            if(!ossClient.doesBucketExist(bucketName)){
                return "您的Bucket不存在";
            }else {
                ossClient.deleteObject(bucketName,fileKey);
                return "==============>Object删除成功:"+fileKey;
            }
        }catch (Exception ex){
            return "删除Object失败";
        }
    }

5.控制层

这里原文是先创建一个文件,然后将文件提交,我个人感觉这样不好看,所以我这里用了上面的文件上传方法,这里传入的是文件流和名字。

image.png

@Controller
@RequestMapping("/oss")
public class UploadController {
    @Autowired
    private Upload upload;
    @GetMapping("/toUploadBlog")
    public String toUploadBlog(){
        return "/upload";
    }
    @PostMapping("/toUploadBlog")
    public String toUploadBlogPost(MultipartFile file){
        String name=file.getOriginalFilename();
        try {
            if(null != file){
                String filename = file.getOriginalFilename();
                if(!"".equals(filename.trim())){
                    String uploadUrl = upload.upload(file.getInputStream(),name);
                }
            }else {
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return "/index";
    }
    @GetMapping("/delete")
    @ResponseBody
    public String deleteBlog(@RequestParam("key")String key){
        upload.deleteBlog(key);
        return "删除成功";
    }
}

6.这里就用的是原文的页面

image.png

image.png

6.运行

1.上传

image.png

image.png

image.png



2.查看

点击图片详情可以看出该链接是由http协议+bucket+文件路径组成

image.png

image.png

3.删除

image.png

7.参考原文

8.代码地址

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
22天前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
存储 Java Maven
Spring Boot WebFlux 增删改查完整实战 demo
Spring Boot WebFlux 增删改查完整实战 demo
|
4天前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
18 0
|
1月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
1月前
|
存储 运维 安全
阿里云OSS的优势
【7月更文挑战第19天】阿里云OSS的优势
66 2
|
1月前
|
存储 API 开发工具
阿里云OSS
【7月更文挑战第19天】阿里云OSS
53 1
|
1月前
|
存储 弹性计算 对象存储
预留空间是什么?阿里云OSS对象存储预留空间说明
阿里云OSS预留空间是预付费存储产品,提供折扣价以锁定特定容量,适用于抵扣有地域属性的Bucket标准存储费用及ECS快照费。通过购买预留空间,如500GB通用预留+100GB标准-本地冗余存储包,用户可优化成本。
|
2月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何将CSV文件从阿里云OSS同步到ODPS表,并且使用列作为表分区
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
DataWorks产品使用合集之如何将CSV文件从阿里云OSS同步到ODPS表,并且使用列作为表分区
|
2月前
|
监控 Serverless 持续交付
阿里云云效产品使用问题之如何让流水线支持构建 flutter web 应用到 OSS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
存储 Java Maven
大事件后端项目31--------文件上传_阿里云OSS_入门程序
大事件后端项目31--------文件上传_阿里云OSS_入门程序