在这里插入图片描述

本人是一名物联网工程专业的学生,写博客即是为了记录自己的学习历程,又希望能够帮助到很多和自己一样处于起步阶段的萌新。
临渊羡鱼,不如退而结网。一起加油!
博客主页:https://blog.csdn.net/qq_44895397

参考官方文档:官方文档有详尽的解释,以及操作实例

1、认识OSS对象存储

简介

  1. 阿里云对象存储OSS是阿里云提供的海量、安全、低成本、高可靠的云存储服务
  2. OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  3. 您可以使用阿里云提供的API、SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。数据存储到阿里云OSS以后,您可以选择标准存储作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储、归档存储作为不经常访问数据的存储方式。

相关概念

  • 存储类型(Storage Class)
    OSS提供标准、低频访问、归档三种存储类型

  • 访问域名(Endpoint)
    Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同地域的时候,需要不同的域名。

  • 访问密钥(AccessKey)
    AccessKey简称AK,指的是访问身份验证中用到的AccessKey Id和AccessKey Secret。

管理OSS

  1. 通过OSS控制台管理OSS

  2. 通过API或SDK管理OSS
    OSS提供RESTful API和各种语言的SDK开发包

  3. 通过工具管理OSS
    OSS提供各类型的管理工具
    1、下载
    在这里插入图片描述
    2、登录
    在这里插入图片描述

通过API或SDK管理OSS

1、开通“对象存储OSS”服务

在这里插入图片描述
在这里插入图片描述

2、获取AccessKey

在这里插入图片描述

3、官方文档:

在这里插入图片描述
在这里插入图片描述

2、上传文件

在这里插入图片描述

1、依赖:

  <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.10.2</version>
 </dependency>

在这里插入图片描述

2、上传模板:

在这里插入图片描述

3、获取三个固定参数值

在这里插入图片描述

public class OssUtils {

	public static endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
	public static accessKeyId = "<yourAccessKeyId>";
	public static accessKeySecret = "<yourAccessKeySecret>";
	public static String bucketName = "ykydemo";//oss服务中桶的名称

}

4、实际代码:

1、为了防止文件名相同覆盖使用UUID扩展文件名
2、方便管理,使用日期来构建文件夹

导入日期工具类的依赖:

<!--日期工具类-->
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
</dependency>

在这里插入图片描述
在这里插入图片描述

按日期生成文件夹以及随机生成的文件名:
在这里插入图片描述

/**
 * @author 爱敲代码的小游子
 * @since 2020-07-20
 */
 public String updateOss(MultipartFile file) {
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        String accessKeyId = OssUtils.accessKeyId;
        String accessKeySecret = OssUtils.accessKeySecret;
        String bucketName = OssUtils.bucketName;
        String uploadUrl = "";
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            //防止出现相同文件被覆盖
            //文件名:uuid.扩展名
            String fileName = file.getOriginalFilename();
            //1、防止文件名相同覆盖之前的文件-->使用uuid拼接fileName
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            fileName = uuid + fileName;
            //2、把文件按日期分类管理
            String time = new DateTime().toString("yyyy/MM/dd");
            fileName = time+"/"+fileName;
            // 上传文件流
            InputStream inputStream = file.getInputStream();
            ossClient.putObject("ykydemo", fileName, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            //获取url地址
            uploadUrl = "http://" + bucketName + "." + endpoint + "/" + fileName;
            System.out.println(uploadUrl);
        }catch (Exception e){
           e.printStackTrace();
        }
        return  uploadUrl;
    }

3、删除文件

在这里插入图片描述

public boolean deleteOss(String fileName){
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        String accessKeyId = OssUtils.accessKeyId;
        String accessKeySecret = OssUtils.accessKeySecret;
        String bucketName = OssUtils.bucketName;
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 删除文件。key等同于ObjectName,表示删除OSS文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
        List<String> keys = new ArrayList<String>();
        keys.add(fileName);
        DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys));
 		List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
        // 关闭OSSClient。
        ossClient.shutdown();
        return true;
    }
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐