android递归压缩上传多张图片到七牛的实例代码

针对这个话题,我们来一步步详细讲解下面的内容:

什么是递归压缩上传?

递归压缩上传就是将需要上传的多张图片按照递归的方式一张张压缩并上传到云存储服务中。这种方式可以避免手机内存不足的问题,并且可以节省上传时间和流量。

如何使用七牛云存储服务?

首先,要使用七牛云存储服务,我们需要注册账号,创建一个存储空间,并且在Android项目中导入七牛SDK。

dependencies {
    compile 'com.qiniu:qiniu-android-sdk:7.2.5'
}

然后,我们需要获取一个上传管理器对象,并且配置一些上传的策略参数。

// 创建上传管理器对象
UploadManager uploadManager = new UploadManager();

// 设置上传策略参数
String ak = "AccessKey"; // 这里填写你的AccessKey
String sk = "SecretKey"; // 这里填写你的SecretKey
String bucketName = "BucketName"; // 这里填写你的BucketName
Auth auth = Auth.create(ak, sk);
String upToken = auth.uploadToken(bucketName);

怎么实现递归压缩上传?

接下来我们来实现递归压缩上传。我们要上传的图片都存储在一个List集合中,首先我们需要判断这个集合是否为空,如果为空则直接返回。

if (mImageList == null || mImageList.size() == 0) {
    return;
}

如果不为空,则取出集合中的第一张图片,进行压缩和上传。

File imageFile = new File(mImageList.get(0));
String imagePath = imageFile.getAbsolutePath();
File compressedImageFile = compressImage(imageFile);
String compressedImagePath = compressedImageFile.getAbsolutePath();
String key = UUID.randomUUID().toString() + ".jpg";

接下来,我们需要将压缩后的图片上传到七牛云存储服务中,并且上传成功后要从List集合中删除这张图片。

uploadManager.put(compressedImagePath, key, upToken, new UpCompletionHandler() {
    @Override
    public void complete(String key, ResponseInfo info, JSONObject response) {
        // 上传完成后的逻辑处理
        if (info.isOK()) {
            mImageList.remove(0); // 上传成功后,从集合中删除这张图片
            recursiveUploadImage(); // 继续递归上传下一张图片
        }
    }
}, null);

最后,我们需要在递归中调用这个方法,完成所有图片的上传。

private void recursiveUploadImage() {
    if (mImageList == null || mImageList.size() == 0) {
        return;
    }
    File imageFile = new File(mImageList.get(0));
    String imagePath = imageFile.getAbsolutePath();
    File compressedImageFile = compressImage(imageFile);
    String compressedImagePath = compressedImageFile.getAbsolutePath();
    String key = UUID.randomUUID().toString() + ".jpg";
    uploadManager.put(compressedImagePath, key, upToken, new UpCompletionHandler() {
        @Override
        public void complete(String key, ResponseInfo info, JSONObject response) {
            // 上传完成后的逻辑处理
            if (info.isOK()) {
                mImageList.remove(0); // 上传成功后,从集合中删除这张图片
                recursiveUploadImage(); // 继续递归上传下一张图片
            }
        }
    }, null);
}

示例说明一:上传多张图片

private List<String> mImageList = new ArrayList<String>();

private void uploadImages() {
    // 向mImageList中添加需要上传的图片路径
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103808.jpg");
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103810.jpg");
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103812.jpg");
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103814.jpg");
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103816.jpg");

    recursiveUploadImage();
}

示例说明二:启动上传

Button uploadButton = findViewById(R.id.uploadButton);
uploadButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        uploadImages();
    }
});

至此,递归压缩上传多张图片到七牛的实例代码的完整攻略就介绍完毕了,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android递归压缩上传多张图片到七牛的实例代码 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 魔兽世界6.2双持冰DK输出优先级及属性BIS选择攻略分享

    魔兽世界6.2双持冰DK输出优先级及属性BIS选择攻略分享 1. 介绍 本攻略旨在分享魔兽世界版本6.2中双持冰死亡骑士的输出优先级和属性BIS选择。通过正确的优先级和合适的属性选择,你可以最大化你的输出能力,并在战斗中发挥更大的作用。 2. 输出优先级 在进行输出时,双持冰死亡骑士需要按照以下优先级进行技能施放: 符文能力死命打击 死命打击是最主要的技能,…

    other 2023年6月28日
    00
  • Windows下jdk安装与卸载超详细步骤

    下面是“Windows下jdk安装与卸载超详细步骤”的完整攻略。 安装JDK步骤 步骤1:下载JDK安装包 访问 Oracle 官方网站 下载相应的JDK安装包。建议下载 .exe 格式的安装包,这样安装会更方便。 步骤2:运行安装程序 双击下载的JDK安装包,跟随安装程序指示进行安装。安装过程中可以根据需要设置JDK的安装目录。 步骤3:设置环境变量 安装…

    other 2023年6月27日
    00
  • Swift语言中的函数学习教程

    当涉及到Swift语言中的函数学习时,以下是一个完整的攻略,其中包含两个示例说明。 函数基础 函数是一段可重复使用的代码块,用于执行特定的任务。在Swift中,函数具有以下基本结构: func functionName(parameters) -> ReturnType { // 函数体 return value } func关键字用于声明函数。 fu…

    other 2023年8月10日
    00
  • 企业一体化网络管理、网络运维管理和数据防泄露系统方案

    企业一体化网络管理、网络运维管理和数据防泄露系统方案攻略 企业一体化网络管理、网络运维管理和数据防泄露系统方案旨在解决企业网络管理、维护和安全问题,提高企业的网络可靠性和安全性。以下是一份完整的攻略,详细介绍如何实现企业一体化网络管理、网络运维管理和数据防泄露系统方案。 第一步:需求分析 首先,需要对企业现有的网络架构、业务需求、网络安全保障和运维管理要求等…

    other 2023年6月27日
    00
  • 华为手机怎么重启?华为手机强制重启教程

    华为手机重启分为正常重启和强制重启两种方式。 正常重启华为手机 想要正常重启华为手机,可以按照以下步骤进行操作: 长按手机的电源按钮,触发手机“关机”界面。 在关机界面中,点击“关机”选项,等待手机自动关闭。 再次长按手机电源按钮,等待华为手机开机。 这种方式是比较安全、合理、标准的一种重启方法。它适用于你的手机操作无异常,但是需要重启或关机时的情形。 强制…

    other 2023年6月26日
    00
  • Java中的字符串常量池详细介绍

    Java中的字符串常量池详细介绍 在Java中,字符串常量池是一种特殊的内存区域,用于存储字符串常量。字符串常量池具有以下特点: 字符串常量池是在堆内存中的一部分,用于存储字符串常量。 字符串常量池中的字符串对象是不可变的,一旦创建就不能被修改。 字符串常量池中的字符串对象是共享的,多个引用可以指向同一个字符串对象。 字符串常量池的目的是提高性能和节省内存,…

    other 2023年10月15日
    00
  • Go中的应用配置管理详解

    Go中的应用配置管理详解 应用程序的配置是指应用程序在工作时所需要的各项参数或属性,如服务端口、数据库连接地址等等。在 Go 语言中,我们通常会使用不同种类的配置管理方式对应用程序进行配置。下面我们将详细讨论 Go 中的应用配置管理及其使用方法。 常见的配置管理方式 1. 命令行参数 命令行参数是传递配置值的最简单方式之一。在 Go 语言中我们可以使用标准库…

    other 2023年6月25日
    00
  • windows2008r2安装sp1时未知错误的解决办法

    windows2008r2安装sp1时未知错误的解决办法 在Windows Server 2008 R2系统中,我们经常需要安装服务包来更新系统和修复错误。但在安装SP1时,有些用户会遇到一些未知错误,导致安装失败。本文将介绍一些解决办法,帮助您成功安装SP1。 问题描述 当您尝试安装Windows Server 2008 R2 SP1时,您可能会在安装过程…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部