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,搭建一个在线教育视频课程分享网站。
相关文章
|
1月前
|
Java API 开发工具
如何用阿里云 oss 下载文件
阿里云对象存储服务(OSS)提供了多种方式下载文件,以下讲解下各种方式的下载方法
756 1
|
27天前
|
存储 安全 对象存储
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
本文详细介绍了怎样帮助新手小白从注册,购买阿里云OSS,到一步一步配置OSS做为图床,和PicGo、Typora软件连接,配置好关联之后,在使用Typora写文章时,如果需要插入图片,只需要将图片复制粘贴到Typora的编辑区域,就会自动通过PicGo上传到指定图床,自动复制外网能访问的URL并展示,简直不要太方便,极大的解决了编辑文章时复制处理图片链接的痛点。
147 2
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
|
28天前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
23 0
|
30天前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
|
3天前
|
存储 Java API
阿里云oss简介和使用流程
本文档介绍了如何准备阿里云OSS(对象存储服务)并开始使用它。首先,需要注册阿里云账号并进行实名认证,然后购买OSS资源包。在阿里云控制台中,可以创建和管理OSS存储空间(称为“Bucket”)。接着,文章简要介绍了阿里云OSS,它是一个基于云端的对象存储服务,提供高可靠性、高性能、低成本和易于使用的特性。 在阿里云OSS控制台,用户可以进行文件的上传和下载操作。通过API,开发者可以使用各种编程语言(如Java)来创建、删除Bucket以及上传、下载和删除文件。例如,Java代码示例展示了如何创建Bucket、上传文件、删除文件以及下载文件到本地的操作。
|
10天前
|
开发工具 对象存储
阿里云OSS文件上传
阿里云OSS文件上传
53 0
|
10天前
|
存储 缓存 Java
阿里云OSS实战从入门到大神
说起阿里云OSS,那作用和功能都是非常强大的,它可以存放图片,音频,视频等资源文件,这些资源文件,你不必存放到服务器的硬盘里,这样既可以节省服务器硬盘空间,又可以降低服务器的读写压力,非常适合大并发的架构。
51 0
|
1月前
|
存储 域名解析 应用服务中间件
阿里云OSS对象存储,实现内网访问,免流量费用
阿里云OSS对象存储,实现内网访问,免流量费用
414 1
|
9天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
17天前
|
Java API Spring
SpringBoot项目调用HTTP接口5种方式你了解多少?
SpringBoot项目调用HTTP接口5种方式你了解多少?
64 2