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,搭建一个在线教育视频课程分享网站。
相关文章
|
4月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
18天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
SQL JSON Java
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码
本文为Spring Boot增删改查接口的小白入门教程,介绍了项目的构建、配置YML文件、代码编写(包括实体类、Mapper接口、Mapper.xml、Service和Controller)以及使用Postman进行接口测试的方法。同时提供了SQL代码和完整代码的下载链接。
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码
|
1月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
3月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
|
4月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
4月前
|
存储 运维 安全
阿里云OSS的优势
【7月更文挑战第19天】阿里云OSS的优势
193 2
|
3月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
336 0
|
4月前
|
存储 API 开发工具
阿里云OSS
【7月更文挑战第19天】阿里云OSS
188 1
|
4月前
|
存储 弹性计算 对象存储
预留空间是什么?阿里云OSS对象存储预留空间说明
阿里云OSS预留空间是预付费存储产品,提供折扣价以锁定特定容量,适用于抵扣有地域属性的Bucket标准存储费用及ECS快照费。通过购买预留空间,如500GB通用预留+100GB标准-本地冗余存储包,用户可优化成本。
206 4