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();

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

  • 相关阅读:
    poj 3528 (三维几何求凸包+凸包表面积)
    dijkstra模板(好像是斐波那契额堆优化,但我为什么看起来像优先队列优化,和spfa一样)
    最大空凸包模板
    ICPC 2017–2018, NEERC, Northern Subregional Contest St Petersburg, November 4, 2017 I题
    hdu 5248 序列变换
    hdu 2063(二分图模板测试)
    组合数
    85. Maximal Rectangle 由1拼出的最大矩形
    750. Number Of Corner Rectangles四周是点的矩形个数
    801. Minimum Swaps To Make Sequences Increasing 为使两个数组严格递增,所需要的最小交换次数
  • 原文地址:https://www.cnblogs.com/fqh2020/p/14753308.html
Copyright © 2011-2022 走看看