Android---阿里云网络视频带进度下载

1.build.gradle中添加阿里云SDK
可以通过以下两种方式安装SDK:
方式一:在Gradle项目中添加依赖项(推荐方式)
在Gradle项目中使用OSS Android SDK,您需要在build.gradle中加入相应依赖。在dependencies {}中,添加以下内容:

implementation 'com.aliyun.dpa:oss-android-sdk:2.9.13'             

方式二:手动引入依赖包
将以下依赖包手动导入libs目录:
aliyun-oss-sdk-android-2.9.13.aar
okhttp-4.10.0.jar
okio-3.2.0.jar

api  'com.aliyun.dpa:oss-android-sdk:+'

环境要求
Android系统版本:2.3 及以上。
必须注册有Aliyun.com用户账户,并开通OSS服务。

Android SDK基于okhttp 3.11.0、okio 1.14.0版本进行开发,安装SDK时会自动依赖okhttp 3.11.0、okio 1.14.0版本。如果您需要使用更高版本的okhttp或okio,您可以在项目中修改为对应版本。

在项目中使用时,您可以把下载得到的jar包引入工程,也可以通过maven依赖。
需要的权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

混淆配置
在proguard-rules.pro文件中,添加以下内容:
-keep class com.alibaba.sdk.android.oss.** { ; }
-dontwarn okio.
*
-dontwarn org.apache.commons.codec.binary.**

对SDK中同步接口、异步接口的一些说明
考虑到移动端开发场景下不允许在UI线程执行网络请求的编程规范,SDK大多数接口都提供了同步、异步两种调用方式,同步接口调用后会阻塞等待结果返回,而异步接口需要在请求时需要传入回调函数,请求的执行结果将在回调中处理。

同步接口不能在UI线程调用。遇到异常时,将直接抛出ClientException或者ServiceException异常,前者指本地遇到的异常如网络异常、参数非法等;后者指OSS返回的服务异常,如鉴权失败、服务器错误等。

异步请求遇到异常时,异常会在回调函数中处理。

OSSClient是OSS服务的Android客户端,为调用者提供了一系列的方法进行操作、管理存储空间(Bucket)和文件(Object)等。在使用SDK发起对OSS的请求前,您需要初始化一个OSSClient实例,并对OSSClient实例进行必要设置。
移动终端是一个不受信任的环境,把AccessKeyId和AccessKeySecret直接保存在终端用来加签请求,存在极高的风险。推荐使用STS鉴权模式或自签名模式。

2.接口

//系统相册目录
String galleryPath = Environment.getExternalStorageDirectory()
		+ File.separator + Environment.DIRECTORY_DCIM
		+ File.separator + "Camera";
File gallery = new File(galleryPath);
if (!FileUtils.isFileExists(gallery)) {
	gallery.mkdir();
}
File file = new File(galleryPath, "视频名称.MP4");

/**
 * @API GetObjectRequest
 * 创建新请求以获取指定对象
 * @参数 bucketName Bucket name
 * @参数 objectKey  Object key
 */
GetObjectRequest request = new GetObjectRequest("阿里云API的bucket名称", "阿里云视频地址");
GetObjectResult object = null;
try {

	/**
	 * API:GetObject
     * 同步下载文件
     * 获取对象。(调用者需要该对象的读取权限)
     * @参数 request
     */
	object = oss.getObject(request);
} catch (Exception e) {
	Log.e(TAG, e.toString());
}
if (object != null) {
	InputStream input = null;
	FileOutputStream uriOutputStream = null;
	byte[] data;
	long totalLength = object.getMetadata().getContentLength();
	int nowLength = 0;
	try {
		/**
		* API: getObjectContent
		* 获取对象内容
		* @返回 InputStream形式的对象内容
		*/
		input = object.getObjectContent();
		data = new byte[input.available()];
		int len;
		uriOutputStream = new FileOutputStream(file.toString());
		while (true) {
			len = input.read(data);
			//这里设置ProgressBar的当前值(nowLength)和最大值(totalLength)
			if (len < 0) break;
			if (//如果需要取消下载,这里设置取消条件) {
				return;
			}
			nowLength += data.length;

			uriOutputStream.write(data, 0, data.length);
			data = new byte[input.available()];
		   
		}
		Tools.scanFile2(context, file.toString());//刷新手机系统相册
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		if (uriOutputStream != null) {
			try {
				uriOutputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		if (input != null) {
			try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

阿里云OSS官方网站:http://oss.aliyun.com
阿里云OSS官方论坛:http://bbs.aliyun.com
阿里云OSS官方文档中心:http://www.aliyun.com/product/oss#Docs
阿里云官方技术支持 登录OSS控制台 https://home.console.aliyun.com -> 点击"工单系统"

public class GetAndUploadFileDemo { private static String TAG = "GetAndUploadFileDemo"; private OSSService ossService; private OSSBucket bucket; public void show() { ossService = OSSServiceProvider.getService(); bucket = ossService.getOssBucket("youcaidao"); // 文件的常规操作如普通上传、下载、拷贝、删除等,与Data类一致,故这里只给出断点下载和断点上传的demo resumableDownloadWithSpecConfig(); // delay(); // resumableUpload(); // delay(); // resumableDownload(); // delay(); } public void delay() { try { Thread.sleep(30 * 1000); } catch (Exception e) { e.printStackTrace(); } } // 断点上传 public void resumableUpload() { // OSSData ossData = ossService.getOssData(sampleBucket, "sample-data"); // ossData.setData(data, "raw"); // 指定需要上传的数据和它的类型 // ossData.enableUploadCheckMd5sum(); // 开启上传MD5校验 // ossData.upload(); // 上传失败将会抛出异常 OSSFile bigfFile = ossService.getOssFile(bucket, "de.jpg"); try { bigfFile.setUploadFilePath( "/storage/emulated/0/Android/data/com.qd.videorecorder/video/VMS_1439866564822.jpg", "image/jpg"); bigfFile.ResumableUploadInBackground(new SaveCallback() { @Override public void onSuccess(String objectKey) { Log.d(TAG, "[onSuccess] - " + objectKey + " upload success!"); } @Override public void onProgress(String objectKey, int byteCount, int totalSize) { Log.d(TAG, "[onProgress] - current upload " + objectKey + " bytes: " + byteCount + " in total: " + totalSize); } @Override public void onFailure(String objectKey, OSSException ossException) { Log.e(TAG, "[onFailure] - upload " + objectKey + " failed!\n" + ossException.toString()); ossException.printStackTrace(); ossException.getException().printStackTrace(); } }); } catch (FileNotFoundException e) { e.printStackTrace(); } } // 断点下载 public void resumableDownload() { OSSFile bigFile = ossService.getOssFile(bucket, "bigFile.dat"); bigFile.ResumableDownloadToInBackground( "/storage/sdcard0/src_file/bigFile.dat", new GetFileCallback() { @Override public void onSuccess(String objectKey, String filePath) { Log.d(TAG, "[onSuccess] - " + objectKey + " storage path: " + filePath); } @Override public void onProgress(String objectKey, int byteCount, int totalSize) { Log.d(TAG, "[onProgress] - current download: " + objectKey + " bytes:" + byteCount + " in total:" + totalSize); } @Override public void onFailure(String objectKey, OSSException ossException) { Log.e(TAG, "[onFailure] - download " + objectKey + " failed!\n" + ossException.toString()); ossException.printStackTrace(); } }); } // 设置相关参数的断点续传 public void resumableDownloadWithSpecConfig() { OSSFile bigFile = ossService .getOssFile(bucket, "VMS_1439866564822.jpg"); ResumableTaskOption option = new ResumableTaskOption(); option.setAutoRetryTime(2); // 默认为2次,最大3次 option.setThreadNum(2); // 默认并发3个线程,最大5个 bigFile.ResumableDownloadToInBackground( "/storage/emulated/0/Android/data/com.qd.videorecorder/video/VMS_1439866564822.jpg", new GetFileCallback() { // /storage/emulated/0/DCIM/Camera/VID_20150803_173350.mp4 @Override public void onSuccess(String objectKey, String filePath) { System.out.println("[onSuccess] - " + objectKey + " storage path: " + filePath); } @Override public void onProgress(String objectKey, int byteCount, int totalSize) { System.out.println("[onProgress] - current download: " + objectKey + " bytes:" + byteCount + " in total:" + totalSize); } @Override public void onFailure(String objectKey, OSSException ossException) { System.out.println("[onFailure] - download " + objectKey + " failed!\n" + ossException.toString()); ossException.printStackTrace(); } }); } }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写代码的猴子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值