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日

相关文章

  • GoLang基于zap日志库的封装过程详解

    GoLang是一个非常流行的开发语言,其最大的优点之一是其强大的日志处理能力,提供了许多第三方的日志库供开发者使用。其中,Zap是GoLang生态系统中最强大、最快速、最稳定的日志库之一,被广泛应用于各种规模的开源项目和商业项目中。在实际的项目中,我们常使用Zap来记录调试、警告、错误等信息,以便于我们及时的进行发现和处理。 在本攻略中,我们将探讨如何基于Z…

    other 2023年6月25日
    00
  • Android开发之SeekBar基本使用及各种美观样式示例

    Android开发之SeekBar基本使用及各种美观样式示例攻略 1. SeekBar基本使用 SeekBar是Android中常用的滑动条控件,用于选择一个范围内的数值。以下是SeekBar的基本使用步骤: 步骤1:在布局文件中添加SeekBar控件 <SeekBar android:id=\"@+id/seekBar\" and…

    other 2023年8月23日
    00
  • Java数据结构实现折半查找的算法过程解析

    Java数据结构实现折半查找的算法过程解析 算法概述 折半查找又被称为二分查找,是一种用于在有序数组中查找指定元素的算法。折半查找的核心思想是利用有序数组的有序性,通过反复将搜索区间折半的方式来定位目标元素。因为每次都取搜索区间中间的值进行比较,所以其时间复杂度为O(log n),是一种高效的查找算法。 算法实现步骤 折半查找过程可以用递归或迭代两种方式实现…

    other 2023年6月27日
    00
  • ubuntu环境变量设置方法分享

    下面是详细讲解“ubuntu环境变量设置方法分享”的完整攻略。 环境变量是什么 环境变量是操作系统定义的一些全局变量,主要用于在所有进程中存储以供访问的值。在 Ubuntu 中,环境变量通常用于指定一些重要的系统路径和配置信息,例如 PATH、JAVA_HOME 等。 查看当前环境变量 在 Ubuntu 终端中,我们可以使用 echo $PATH 命令查看当…

    other 2023年6月27日
    00
  • php实现根据IP地址获取其所在省市的方法

    PHP实现根据IP地址获取其所在省市的方法 要实现根据IP地址获取其所在省市的功能,可以借助第三方IP地址库和PHP的网络请求功能。以下是一个完整的攻略,包含了两个示例说明。 步骤一:获取IP地址 首先,我们需要获取用户的IP地址。可以使用$_SERVER[‘REMOTE_ADDR’]来获取用户的IP地址。示例代码如下: $ip = $_SERVER[‘RE…

    other 2023年7月30日
    00
  • 20个提高开发效率的VS Code快捷键(推荐)

    20个提高开发效率的VS Code快捷键(推荐)攻略 1. 快速打开文件 使用快捷键 Ctrl + P 可以快速打开文件。在弹出的输入框中输入文件名或路径的一部分,VS Code会自动匹配并显示相关文件。 示例:要打开名为 index.html 的文件,按下 Ctrl + P,然后输入 index.html,选择匹配的文件即可。 2. 快速切换文件 使用快捷…

    other 2023年9月6日
    00
  • C++类继承之子类调用父类的构造函数的实例详解

    C++类继承之子类调用父类的构造函数的实例详解 在C++的类继承中,派生类可以通过调用基类的构造函数来完成对基类部分的初始化,这个过程叫做子类调用父类的构造函数。本文将会详细讲解如何在C++继承中实现子类调用父类的构造函数,包括示例说明和实际应用场景。 子类如何调用父类的构造函数 子类调用父类的构造函数一般通过子类的初始化列表来完成。子类初始化列表中使用基类…

    other 2023年6月26日
    00
  • Color Blender—在线渐变色带生成器

    Color Blender – 在线渐变色带生成器的完整攻略 Color Blender是一款在线渐变色带生成器,可以帮助用户快速生成渐变色带。本文将为您提供一份Color Blender的完整攻略,包括使用方法、操作步骤和两个示例说明。 使用方法 使用Color Blender生成渐变色带的方法如下: 打开Color Blender网站:在浏览器中输入ht…

    other 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部