1.对象存储oss的概念

OSS类似于网盘,但是你可以拿到文件支链,包含附件服务器、头像服务器、图片服务器、下载服务器等,对象存储OSS是在云上提供无层次结构的分布式存储产品,为用户提供单价较低且快速可靠的数据存储方案。用户可通过云服务器实例或互联网使用 Web API 接口存储和检索数据。在 OSS 上的数据,用户使用指定域名的 URL 地址,通过 HTTP/HTTPS 协议存储和检索每个独立的数据对象。

2.对象存储的优点

可扩展性高:对外服务是可以宣称做到空间无限的,用户不用担心空间不够的问题;

安全性高:对象存储通常凭借HTTP调用对象存储本身提供的认证密钥来提供数据访问;

效率高:扁平化结构,不受复杂目录系统对性能的影响;

成本低:与块存储方式相比,对象存储是最具成本效益的数据存储类型,并且与云计算搭配,把对象存储的这一特性发挥的淋漓尽致。

访问方便:对象存储提供开放的REST API接口。程序员在开发应用时,直接把存储参数写进代码,就可以通过API接口调用对象存储里的数据。相比文件存储那一串串的路径,对象存储要方便很多。(对象存储需求用户,并不是个人买来当网盘用,而是企业或政府用户用于系统数据存储。例如企业系统的归档数据,网站、App的静态图片、音频、视频等。)

3.阿里云oss对象存储

为了解决海量数据存储与弹性扩容,我们采用云存储的解决方案- 阿里云OSS。

3.1开通服务

进入阿里云官网网站:https://www.aliyun.com/?utm_content=se_1008364713 搜索产品对象存储OSS

具体步骤可参考如下:

(1)申请阿里云账号

(2)实名认证

(3)开通“对象存储OSS”服务

(4)进入管理控制台

3.2创建bucket

选择:标准存储、公共读、不开通

阿里云oss对象存储_阿里云

 

 4.使用java代码上传图片到oss

4.1创建项目

创建maven项目aliyun-oss

4.2导入依赖

在pom.xml中导入相关依赖

        com.aliyun.ossaliyun-sdk-oss2.5.0

4.3定义常量

在application.yml中定义常量

aliyun:
  oss:
    file:
      endpoint: oss-cn-shanghai.aliyuncs.com
      keyid: LTAIsOB7XkCHTGX8
      keysecret: ASy5lzMwr5KIVEUY3eDhFFijD1RkPC
      bucketname: eric123

4.4创建初始化工具类

创建一个类来获取yml里面定义的常量

具体代码操作如下

阿里云oss对象存储_阿里云_02阿里云oss对象存储_阿里云_03

    @Value("${aliyun.oss.file.endpoint}")    private String endpoint;

    @Value("${aliyun.oss.file.keyid}")    private String keyid;

    @Value("${aliyun.oss.file.keysecret}")    private String keysecret;

    @Value("${aliyun.oss.file.bucketname}")    private String bucketname;

    @Value("${aliyun.oss.file.host}")    private String host;    //定义常量,为了能够使用
    public static String ENDPOINT;    public static String KEYID;    public static String KEYSECRET;    public static String BUCKEYNAME;    public static String HOST;

    @Override    public void afterPropertiesSet() throws Exception {
        ENDPOINT=endpoint;
        KEYID=keyid;
        KEYSECRET=keysecret;
        BUCKEYNAME=bucketname;
        HOST=host;
    }

View Code

4.5上传文件到oss

创建类来实现上传文件到阿里云oss,参考SDK中的:Java->上传文件->简单上传->流式上传->上传文件流

    @PostMapping("uploadFile")    public R uploadTeacherImg(@RequestParam("file") MultipartFile file,
                              @RequestParam(value = "host", required = false) String host) {        try {
            String filename = file.getOriginalFilename();
            String uuid = UUID.randomUUID().toString();
            filename = uuid + filename;            //获取当前时间
            String filepath = new DateTime().toString("yyyy/MM/dd");            //拼接文件完整名称
            String hostName = ConstantPropertiesUtil.HOST;            if (StringUtils.isEmpty(host)) {
                filename = filepath + "/"+ hostName + "/" + filename  ;
            } else {
                filename = filepath + "/" + host + "/" + filename;
            }
            InputStream in = file.getInputStream();            // 创建OSSClient实例。
            OSSClient ossClient = new OSSClient(ConstantPropertiesUtil.ENDPOINT, ConstantPropertiesUtil.KEYID, ConstantPropertiesUtil.KEYSECRET);            // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。            //  InputStream inputStream = new FileInputStream("D:\\localpath\\examplefile.txt");            // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。            ossClient.putObject(ConstantPropertiesUtil.BUCKEYNAME, filename, in);            // 关闭OSSClient。            ossClient.shutdown();            //https://eric123.oss-cn-shanghai.aliyuncs.com/0406_1.jpg
            String path = "http://" + ConstantPropertiesUtil.BUCKEYNAME + "." + ConstantPropertiesUtil.ENDPOINT + "/" + filename;            return R.ok().data("imageUrl", path);
        } catch (Exception e) {            return R.error();
        }
    }

 4.6删除oss中的文件

// Endpoint以杭州为例,其它Region请按实际情况填写。String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "";
String accessKeySecret = "";
String bucketName = "";
String objectName = "";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。ossClient.deleteObject(bucketName, objectName);// 关闭OSSClient。ossClient.shutdown();