针对这个话题,我们来一步步详细讲解下面的内容:
什么是递归压缩上传?
递归压缩上传就是将需要上传的多张图片按照递归的方式一张张压缩并上传到云存储服务中。这种方式可以避免手机内存不足的问题,并且可以节省上传时间和流量。
如何使用七牛云存储服务?
首先,要使用七牛云存储服务,我们需要注册账号,创建一个存储空间,并且在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技术站