Android手册manual,4. Android-Sdk

这篇博客详细介绍了如何使用Android SDK进行文件上传的配置,包括设置上传分块大小、重试次数、超时时间等关键参数。同时,文章还展示了如何构造上传对象、执行上传任务,并提供了上传回调函数的示例,支持断点续传和错误处理。最后,提到了如何取消上传任务。整个过程充分考虑了网络环境和用户体验。
摘要由CSDN通过智能技术生成

4.6.3. 使用SDK上传¶

4.6.3.1. 配置文件说明¶

// 对NOS上传加速Android-SDK进行配置,请在初始化时设置配置,初始化完成后修改配置是无效的

AcceleratorConf conf = new AcceleratorConf();

// SDK会根据网络类型自动调整上传分块大小,如果网络类型无法识别,将采用设置的上传分块大小

// 默认32K,如果网络环境较差,可以设置更小的分块

// ChunkSize的取值范围为:[4K, 4M],不在范围内将抛异常InvalidChunkSizeException

conf.setChunkSize(1024 * 32);

// 设置分块上传失败时的重试次数,默认2次

// 如果设置的值小于或等于0,将抛异常InvalidParameterException

conf.setChunkRetryCount(2);

// 设置文件上传socket连接超时,默认为10s

// 如果设置的值小于或等于0,将抛异常InvalidParameterException

conf.setConnectionTimeout(10 * 1000);

// 设置文件上传socket读写超时,默认30s

// 如果设置的值小于或等于0,将抛异常InvalidParameterException

conf.setSoTimeout(30 * 1000);

// 设置LBS查询socket连接超时,默认为10s

// 如果设置的值小于或等于0,将抛异常InvalidParameterException

conf.setLbsConnectionTimeout(10 * 1000);

// 设置LBS查询socket读写超时,默认10s

// 如果设置的值小于或等于0,将抛异常InvalidParameterException

conf.setLbsSoTimeout(10 * 1000);

// 设置刷新上传边缘节点的时间间隔,默认2小时

// 合法值为大于或等于60s,设置非法将采用默认值

// 注:当发生网络切换,Android-SDK会在下次上传文件时做一次接入点刷新

conf.setRefreshInterval(DateUtils.HOUR_IN_MILLIS * 2;);

// 设置统计监控程序统计发送间隔,默认120s

// 合法值为大于或等于60s,设置非法将采用默认值

conf.setMonitorInterval(120 * 1000);

// 设置httpClient,默认值为null

// 非null:使用设置的httpClient进行文件上传和统计信息上传

// null:使用sdk内部的机制进行文件上传和统计信息上传

conf.setHttpClient(httpClient);

// 设置是否用线程进行统计信息上传,默认值为false

// true:创建线程进行统计信息上传

// false:使用service进行统计信息上传

conf.setMonitorThread(true);

// 配置赋值给上传加速类

WanAccelerator.setConf(conf);

4.6.3.2. 构造上传对象¶

String uploadToken = "I_AM_UPLOAD_TOKEN_FROM_APP_SERVER";

WanNOSObject wanNOSObject = new WanNOSObject();

wanNOSObject.setNosBucketName("YOUR_BUCKET_NAME");

wanNOSObject.setNosObjectName("YOUR_OBJECT_NAME");

wanNOSObject.setContentType("image/jpeg") // 请根据实际情况设置正确的MIME-TYPE

wanNOSObject.setUploadToken(uploadToken);

4.6.3.3. 执行上传¶

/**

* 上传上下文,用于断点续传,如果是新上传则赋值为null

* 如果要支持断点续传,需在onUploadContextCreate回调中

* 持久化上传上下文信息

*/

String uploadContext = null;

//如果要支持断点续传或者crash后断点重传,需要持久化,以SharedPreferences为例

//SharedPreferences mPerferences = getDefaultPreferences(context);

//String uploadContext = mPerferences.getString(file.getAbsolutePath(), null);

UploadTaskExecutor executor = WanAccelerator.putFileByHttp(

this.getBaseContext(), // 把当前Activity传进来

new File("FILE_TO_BE_UPLOADED_PATH"), // 待上传文件对象

null, // 在onUploadContextCreate和onProcess被回调的参数

// 如果支持断点续传,需要把待上传对象路径传过去

// 以便onUploadContextCreate更新

uploadContext, // 上传上下文,用于断点续传

wanNOSObject, // 上传对象类,里面封装了桶名、对象名、上传凭证

new Callback() { // 回调函数类,回调函数在UI线程

// 正常情况下只回调一次:oldUploadContext为null

// 当一次上传花费太长时间时UploadContext可能失效,

// 服务端会返回一个新的UploadContext,此时需要更新UploadContext

@Override

public void onUploadContextCreate(Object fileParam,

String oldUploadContext,

String newUploadContext) {

System.out.println("onUploadContextCreate.......");

//如果要支持断点续传或者crash后断点重传

//SharedPreferences mPerferences =

// PreferenceManager.getDefaultSharedPreferences(context);

// SharedPreferences.Editor mEditor = mPerferences.edit();

// mEditor.putString("FILE_TO_BE_UPLOADED_PATH", newUploadContext);

// mEditor.commit();

}

// 上传进度回调,每上传完一块就调用一次

// fileParam: 上传文件的相关参数

// current: 当前上传多少

// total: 文件总大小

@Override

public void onProcess(Object fileParam,

long current, long total) {

System.out.println("onProcess.......current = " + current +

", total = " + total);

}

//上传成功回调函数: 如果要实现crash后的重传

//使用者需要将持久化的删除

@Override

public void onSuccess(CallRet ret) {

System.out.println("onSuccess......." + ret.getHttpCode());

}

// 上传失败回调函数: CallRet里面有具体的失败信息

// 使用者需要将持久化的删除

@Override

public void onFailure(CallRet ret) {

System.out.println("onFailure.......");

}

//上传取消回调函数: 用户可以在此处做暂停等业务

@Override

public void onCanceled(CallRet ret) {

System.out.println("onCanceled.......");

}

});

4.6.3.4. 取消上传¶

executor.cancel();

Attention

Android一般的情况下会使用一个主线程来控制UI,非主线程无法控制UI,在Android4.0+之后不能在主线程完成网络请求,本SDK是根据以上的使用场景设计,所有网络的操作均使用独立的线程异步运行,WanAccelerator.putFileByHttps是在主线程调用的,在回调函数内可以直接操作UI控件。WanAccelerator.putFileByHttps线程安全,可并发调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值