zoukankan      html  css  js  c++  java
  • 阿里云oss对象存储

    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

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

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

    4.1创建项目

    创建maven项目aliyun-oss

    4.2导入依赖

    在pom.xml中导入相关依赖

            <!--oss依赖-->
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>2.5.0</version>
            </dependency>

    4.3定义常量

    在application.yml中定义常量

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

    4.4创建初始化工具类

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

    具体代码操作如下

        @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 = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    String objectName = "<yourObjectName>";
    
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
    ossClient.deleteObject(bucketName, objectName);
    
    // 关闭OSSClient。
    ossClient.shutdown();

    一点点学习,一丝丝进步。不懈怠,才不会被时代所淘汰!

  • 相关阅读:
    ubuntu15.04下安装配置docker
    在Vmware/VirtualBox虚拟机环境中正确打开虚拟机
    windows下使用cx_freeze将Python程序打包成exe可执行文件
    Python正则表达式学习小结
    Ubuntu环境下利用Python3+PyQt5+Eric6进行GUI编程
    C#学习笔记——控件篇
    商务英语学习第一课(lending(借贷))
    Ajax的请求方式:get和post
    XML就像是扩展应用范围的HTML
    JQ数组=jQuery对象数组
  • 原文地址:https://www.cnblogs.com/fqh2020/p/14753308.html
Copyright © 2011-2022 走看看