IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> OBS第三方文件服务平台介绍以及在android中的应用(接上一篇文章的公司项目) -> 正文阅读

[移动开发]OBS第三方文件服务平台介绍以及在android中的应用(接上一篇文章的公司项目)

前言
本篇文章主要是具体介绍OBS在android中的应用,关于OBS的概念的话我就简单介绍一下哈,不过也不用担心,我会将OBS的官网链接放到文章里,有需要的可以点进去详细了解一下哈。。。。

首先简单介绍一下OBS是什么,Object Storage Service简称OBS——对象存储服务。官网详细介绍如下:

对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。OBS系统和单个桶都没有总数据容量和对象/文件数量的限制,为用户提供了超大存储容量的能力,适合存放任意类型的文件,适合普通用户、网站、企业和开发者使用。OBS是一项面向Internet访问的服务,提供了基于HTTP/HTTPS协议的Web服务接口,用户可以随时随地连接到Internet的电脑上,通过OBS管理控制台或各种OBS工具访问和管理存储在OBS中的数据。此外,OBS支持SDK和OBS API接口,可使用户方便管理自己存储在OBS上的数据,以及开发多种类型的上层业务应用。华为云在全球多区域部署了OBS基础设施,具备高度的可扩展性和可靠性,用户可根据自身需要指定区域使用OBS,由此获得更快的访问速度和实惠的服务价格。

简单的来说就是以往的开发逻辑是将获取到的文件上传到服务端上,但是现在我们可以将这些获取到的文件保存到OBS上,并且OBS还提供管理服务,让用户通过文件管理工具(OBS Browser+的下载)去自行处理管理文件,而不是用代码去增删改查,属实方便很多,哈哈哈。。。(当然OBS也支持开发者去用OBS SDK或者API接口去管理上传到OBS上的文件)同时对象存储服务的基本构成是对象,对象就是我们上传上去的文件资源,而桶就是存储对象的容器,其实就是文件夹;好啦,基本概念就介绍到这,下面来通过公司项目来实战一下吧:
先来说一下,公司项目的开发要求,将用户选中的图片资源批量上传到OBS上就可以了。好的,现在来一步一步按照官网的步骤来,(前提在电脑上下载好了OBS Browser+,同时有公司的公钥和私钥去登录到公司的域里)如下图所示:
前提在这里插入图片描述在这里插入图片描述
在这里插入图片描述
好啦,开始进入官网学习吧,点击侧边栏的”SDK参考——>选择Android——>快速入门“ 如图:
在这里插入图片描述
之后就开始按照官网提示去安装SDK,如图:
在这里插入图片描述
这里说明一下就是我为什么直接开始安装SDK是因为android的开发环境我已经安装好了哈,所以如果没有安装好android的开发环境的同学可以先从“开发环境准备”这里操作哈,对了,还有一个非常重要的事情就是这个obs的文件服务他不是免费的,是需要付费的,如果同学您是企业开发人员的话,可以找公司报销,如果童鞋还是在校生,也可以尝试一下,从“OBS服务环境搭建”这里开始去阅读哈,目前我还没找到免费的途径,很抱歉。
好的,准备工作做好了之后,接下来就是用代码去实现上传文件资源到云端了(是的,其实OBS背后的技术就是云计算,他相当于百度云一样,是一个云端存储器)因为官网介绍的很详细,所以我就不一一的叙述每段代码了,我来跟进公司项目来具体讲解一下代码的实现:

//获取图片路径 响应startActivityForResult多图选择器的响应数据
    @SuppressLint("LongLogTag")
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==REQUEST_CODE){
            if (resultCode==RESULT_OK){
            //得到图片路径的集合
               ArrayList<String> list=data.getStringArrayListExtra(SelectorSettings.SELECTOR_RESULTS);
               //显示到网格布局上去
               loadAdapter(list);
                Log.i("jjjj", "list: "+ list.toString());
               gvPic.setVisibility(View.VISIBLE);
               gvPic.setNumColumns(list.size());
               //将图片路径转换成file格式
               for (String s:list){
                   File f=new File(s);
                   files.add(f);
               }
               //重开一个线程
               new Thread(new Runnable() {
                   @Override
                   public void run() {
                       for (String s:list){
                       //获取文件名称,带后缀名的
                           fileName=getFileName(s);
                           filesNameList.add(fileName);
                           //上传到OBS
                           uploadAndGetPicUrl(filesNameList,files);
                       }
                   }
               }).start();
            }
        }
    }
@SuppressLint("LongLogTag")
    private void uploadAndGetPicUrl(List<String> fileNames,List<File> fs) {
   	 /*用公司的终端节点,因为将文件资源上传到OBS上之后就将文件变成了一个网络资源,所以需要获取到这个网络资源的所在的网址,OBS上有文件资源的文件路径,后面给他拼接到一起就可以了*/
        String endPoint = "https://endPoint";
        String ak = "公司的公钥";
        String sk = "公司的私钥";
     // 创建ObsClient实例
        ObsClient obsClient = new ObsClient(ak, sk, endPoint);
        //在上传文件之前在OBS上创建保存文件的文件夹feedback_pic
        final String keySuffixWithSlash = "test/feedback_pic/";
        obsClient.putObject("公司的桶名称", keySuffixWithSlash, new ByteArrayInputStream(new byte[0]));
        // 初始化线程池
        ExecutorService executorService = Executors.newFixedThreadPool(20);
        // 执行并发上传
        for (File f:fs){
                executorService.execute(() -> {
                    if (f.isDirectory()){
                        // 如果是空文件夹,则在桶内创建对应的空文件夹对象
                        for (String name:fileNames){
                            if (f.getPath().contains(name)){
                                String remoteObjectKey = keySuffixWithSlash + fileNames + "/";
                                obsClient.putObject("公司的桶名称", remoteObjectKey, new ByteArrayInputStream(new byte[0]));
                            }
                        }
                    }else{
                    //清空一下数据集合
                        urlList.clear();
                        //批量上传文件资源
                        for (String name:fileNames){
                            if (f.getPath().contains(name)){
                            //拼接上传的文件路径
                                String remoteObjectKey = keySuffixWithSlash + name;
                                //将从图片选择器上获取到的文件路径以file的类型上传,并且上传到拼接好的目录上去
                                obsClient.putObject("公司的桶名称", remoteObjectKey, new File(f.getPath()));
                                //添加这个文件目录字符串,便于发送给后台
                                urlList.add(remoteObjectKey);
                            }
                        }
                    }
                });
        }
        // 等待上传完成
        executorService.shutdown();
        while (!executorService.isTerminated())
        {
            try
            {
                executorService.awaitTermination(5, TimeUnit.SECONDS);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
        // 关闭obsClient
        try {
            obsClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
//根据传入的文件路径截取下图片名称带后缀名的
    public  String getFileName(String pathandname){
        int  start=pathandname.lastIndexOf( "/" );
        int  end=pathandname.lastIndexOf( "." );
        if  (start!=- 1  && end!=- 1 ) {
        //如果return  pathandname.substring(start+ 1,end+1 );就是不带后缀名的文件名称
            return  pathandname.substring(start+ 1 );
        } else  {
            return  null ;
        }
    }

好啦,以上就是将用户选中的图片批量上传到OBS上的全部知识点,之所以使用OBS对象存储服务是因为如果将用户选中的图片、视频之类的文件上传到服务端,那么我们知道这些图片和视频文件需要消耗的内存是非常大的,那么有的用户要上传那么多图片资源到服务端,这对于服务端来说非常不利的,所以我们可以把这些资源上传到第三方平台,更何况OBS是基于云计算技术支持的,所以OBS的还有最大的好处就是他可以实现自动扩容的功能,这样就不怕服务端会崩了。。。。上传成功后可以在OBS的管理工具上查看的,顺着自己拼接好的路径一个个的点开就行了,如图:
在这里插入图片描述

同时还支持对上传后的文件删除,编辑等功能,总之就是很方便。。。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:42:49  更:2021-08-12 16:43:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:48:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码