代码拉取完成,页面将自动刷新
直接导入编译好的jar包到工程目录, woLib*****.jar 在项目 app/libs/ 目录中, 可复制到自己的项目中直接使用, 暂时只提供jar包的方式, 后续升级集成gradle依赖方案
demo apk 在项目apk目录下, 可直接安装到安卓手机
添加依赖
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'io.reactivex.rxjava2:rxjava:2.2.14'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.squareup.okhttp3:okhttp:4.2.2'
implementation 'com.lzy.net:okgo:3.0.4'
初始化
在app入口的 application onCreate 中初始化
public void onCreate() {
super.onCreate();
Config config = new Config.Builder()
//host
.setHost("host")
//是否打开日志
.setLog(true)
//上传重试次数
.setReTryCount(0)
//最大上传并发请求数,默认1个
.setMaxUploadRequest(1)
.build();
WoLib.getInstance().init();
WoLib.getInstance().setToken("token", new IVerifyTokenCallback() {
@Override
public void success() {
}
@Override
public void error(int i, String s) {
}
});
}
注: config的host可动态配置, 默认 https://b.smartont.net ; 在开始上传文件与相册备份前必须初始化 setToken()
WoLib.getInstance().setToken("token",callback)
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
### 对SDK中上传异步接口的一些说明
> 注: 暂时只提供异步上传的方案, 已自动开启分片上传
```
//初始化上传管理类
UploadManager manager=new UploadManager()
//初始化上传请求参数
//filePath 文件路径(文件绝对路径或者uri)
PutUploadRequest putRequest = new PutUploadRequest("filePath");
//创建任务并开始异步上传, manager已内置线程池, 最大线程数为1, uploadId可作为断点续传的唯一标志
manager.upload(putRequest, new ICreateTaskCallback() {
@Override
public void createTaskSuccess(UploadRequest request, String uploadId) {
}
@Override
public void createTaskError(UploadRequest request, String code, String msg) {
}
});
//监听上传进度
putRequest.setUploadResultCallback(resultCallback);
//注: uploadError中errorCode等于UploadError.UPLOAD_ERROR_10005代表手动暂停上传
private IUploadResultCallback resultCallback = new IUploadResultCallback() {
@Override
public void uploadProgress(UploadRequest uploadRequest, UploadProgress uploadProgress) {
}
@Override
public void uploadSuccess(UploadRequest uploadRequest, UploadProgress uploadProgress, String fid) {
}
@Override
public void uploadError(UploadRequest uploadRequest, String errorCode, String errorMsg) {
}
};
//取消上传
putRequest.cancel();
//继续上传 isUpload 加入上传任务是否成功
isUpload = manager.upload(putRequest)
//新建上传任务
PutUploadRequest putRequest = new PutUploadRequest( "filePath" );
manager.upload(putRequest);
//断点续传
ResumeUploadRequest ResumeUploadRequest=new ResumeUploadRequest("uploadId", "filePath");
manager.upload(resumeRequest);
//状态码
//http 状态码
//200 请求成功
//201 上传分片成功
//400 参数错误
//401 用户校验错误
//405 http method不支持
//495 云盘过期
//496 云盘空间不足
//497 上传分片数据不完整
//498 未绑定云盘
//500 服务器错误
//返回json 状态码
//0000 成功
//1001 失败
//1002 参数错误
//1003 未登录
//9999 内部错误
//0 waiting upload 1 upload ing 2 upload cancel or pause 3 upload ok 4 upload error
UploadRequest uploadStatus
客户端可自定义上传状态码, 可高度拓展客户端各种需求, 如上作为参考, 详细使用方法参考demo
注: uploadmanager上传管理类建议放在servie或者全局单列中持有, 切勿创建多个 UploadManager 对象, 所有回调结果都在ui主线程
注意:
//deviceCode:设备唯一code(每台设备唯一,不随用户而改变),客户端自行设置
//backupType:备份类型 全部:BackupType.ALL 照片:BackupType.IMAGE 视频:BackupType.VIDEO
BackupGalleryManager.getInstance().start(deviceCode, backupType,new OperatorCallback() {
@Override
public void onOperatorComplete() {
}
});
具体调用可参照demo
BackupGalleryManager.getInstance().pause(new OperatorCallback() {
@Override
public void onOperatorComplete() {
}
});
BackupGalleryManager.getInstance().resume(new OperatorCallback() {
@Override
public void onOperatorComplete() {
}
});
BackupGalleryManager.getInstance().cancel(new OperatorCallback() {
@Override
public void onOperatorComplete() {
}
});
//备份监听回调
BackupGalleryManager.getInstance().setOnIBackupResultCallBack(backupResultCallBack);
//回调接口
backupResultCallback = new IBackupResultCallback() {
@Override
public void backupProgress(FileBean fileBean, int totalCount, int unBackupCount) {
//fileBean 文件信息 可能为null,需判空处理 totalCount 备份总数 unBackupCount 未备份数
if(null != fileBean){
//....注:fileBean 增加deviceCode 与 deviceName每个文件备份完成均会回调
}
}
@Override
public void backupComplete() {
}
@Override
public void backupError(int backupStatus, String errorCode, String errorMsg) {
//backupStatus 0 无状态 1 初始化中(验证中) 2 文件扫描中 3 备份中 4 暂停中 5 备份全部完成
}
}
BackupBean backupBean = BackupGalleryManager.getInstance().getBackupBean();
//backupBean
//int backupStatus;//backupStatus 0 无状态 1 初始化中(验证中) 2 文件扫描中 3 备份中 4 暂停中 5 备份全部完成
//int totalCount;//备份总数
//int unBackupCount;//未备份数
String code_20000 = "20000";//未开启读写权限
String code_20001 = "20001";//无网络
String code_20002 = "20002";//获取备份设备信息错误
String code_20003 = "20003";//注册备份设备错
filePath : uri
---start upload path:content://com.android.providers.media.documents/document/image%3A4942
---start upload create file with query media db and copy
---start upload query file by db
---start upload copy file to app cache dir
---start upload query and copy success , file path: /storage/emulated/0/Android/data/com.example.wodemo/cache/WechatIMG5265.jpeg
---start upload register request
---start upload register params: {"backupDeviceId":0,"cellphone":"18825144571","fileHash":"6ed850718481b775831bc4dcad4da4c0128874","fileLastmod":1605856146000,"fileName":"WechatIMG5265.jpeg","fileSize":128874,"fileType":1,"partSize":8388608,"uploadType":0}
filePath : file绝对路径
---start upload path /sdcard/Pictures/WechatIMG5265.jpeg
---start upload create file
---start upload register request
---start upload register params: {"backupDeviceId":0,"cellphone":"18825144571","fileHash":"6ed850718481b775831bc4dcad4da4c0128874","fileLastmod":1605856146000,"fileName":"WechatIMG5265.jpeg","fileSize":128874,"fileType":1,"partSize":8388608,"uploadType":0}
一般首先检测上传过程是否如上按顺序打印, 然后判断filePath是否有问题
如果在sdk中进行硬编码会导致sdk和业务耦合太严重,后续有一点改动都需要修改sdk,不方便扩展,所以具体的过滤规则应该由业务端(APP)来实现,具体的做法是sdk申明一个接口,在上传或备份文件的时候会调用方法,具体的方法由APP实现。
sdk申明UploadStrategy接口, 接口中beforeUpload返回结果用来判定文件是否上传,如果返回true说明文件满足要求,则继续进行上传,如果是返回false说明文件不满足要求则停止该文件上传。上传和备份使用uploadType来进行区分, 0表示正常上传的时候调用,1表示备份的时候调用。
细节说明:
1、app端可以定义多个实现类来对应不同的用户权益,只需要在配置sdk的时候传入对应实现即可;
2、文件过滤方法调用是在实际上传时候进行,排队中的文件不会调用方法进行判定;
3、如果在上传的时候调用该方法返回false,会跟之前的出错原因进行回调,错误码为10010。备份的时候没有对单个任务的回调,所以备份不会额外进行回调。
sdk接口定义如下:
public interface UploadStrategy(){
boolean beforeUpload(File file, int uplodType);
}
app客户端需自定义实现类并实现该接口,在beforUpload()中实现业务过滤规则:可参照demo 实现类:
public class MyUploadStrategy implements UploadStrategy {
@Override
public boolean beforeUpload(File file, int uploadType) {
if(....){
return false;
}
return true;
}
初始化策略:
MyUploadStrategy myUploadStrategy = new MyUploadStrategy();
WoLib.getInstance().setUploadStrategy(myUploadStrategy);
注意:以上初始化在上传文件、备份前初始化一次即可,全局维持一个myUploadStrategy 对象;若需替换策略规则再次初始化即可。
demo已实现功能,若有问题请详细对照demo实现方法!
v1.0.2(2020.0929)
uploadRequest添加fileBean
uploadRequest.fileBean
private String fileName;//原始文件名
private String filePath;//文件路径
private String fileType;//文件类型
private String serverFileName;//上传成功后服务器存储文件名
private String fileSize;//文件大小
private String lastModified;//拍照时间 时间戳
private String uploadId;//上传id
private String fid;//上传成功后服务器存储文件id
v1.0.3(2020.1016)
wolib 初始化增加回调接口 IInitCallback
uploadManager去除config, config统一在wolib中初始化, uploadRequest参数修改, 只需要一个filePath或者uri 即可完成上传
备份去除所有业务逻辑, 只保留基本的备份功能
具体使用详情可查看demo和readme文档
v1.0.3(2020.1021)
- 增加获取文件类型方法
com.cloud.wolibrary.util.FileTypeUtils;
int type = FileTypeUtils.getFileType(fileName)
v1.0.4(2020.1027)
相册备份接口IBackupResultCallback()回调,每个文件备份完成,返回fileBean 增加 deviceCode(设备唯一id) 与 deviceName(设备名称)字段
private String fileName;//原始文件名
private String filePath;//文件路径
private int fileType;//文件类型
private String serverFileName;//上传成功后服务器存储文件名
private String fileSize;//文件大小
private String lastModified;//拍照时间 时间戳
private String uploadId;//上传id
private String fid;//上传成功后服务器存储文件id
private String deviceCode;//设备唯一id
private String deviceName;//设备名
Config 添加 maxUploadRequest 最大上传并发数配置, 初始化wolib时调用
Config config = new Config.Builder()
.setDebug(true)
.setLog(true)
.setReTryCount(0)
.setMaxUploadRequest(1)
.build();
v1.0.4
uploadRequest 增加 extraMap 字段
private Map<String, Object> extraMap = new HashMap<>();
public Map<String, Object> getExtraMap() {
return extraMap;
}
v1.0.5
- woLib 增加 setToken 方法用于验证token, 去除init回调以及setPhone方法
WoLib.getInstance().setToken("token", callback );
IVerifyTokenCallback callback = new IVerifyTokenCallback() {
@Override
public void success() {
}
@Override
public void error(int i, String s) {
}
};
v1.0.6
- config 增加 setHost() 方法用于动态配置主域名, 默认值为 https://b.smartont.net
- woLib 删除 setDebug() 方法
v1.0.7
fileBean 添加 backupAlbum字段
v1.0.7
备份和上传前, 对token和服务器返回手机号码增加判断是否为null或者""
v1.0.8
1. 备份文件增加单独各一个文件的进度监听
public interface IBackupResultCallback {
void backupFileProgress(FileBean fileBean, UploadProgress progress);
......
}
2. 对上传注册接口参数进行打印, 增加排查日志对比文档
v1.0.9
1. resumeRequest(uploadId)增加createTaskSuccess回调, 回调的结果就是调用者传入的uploadId
2. 重试版本中增加了手动暂停回调, 日志优化
v1.1.0
1. 优化特殊文件的处理方式
v1.1.1
//200 请求成功
//201 上传分片成功
//400 参数错误
//401 用户校验错误
//405 http method不支持
//495 云盘过期
//496 云盘空间不足
//497 上传分片数据不完整
//498 未绑定云盘
//500 服务器错误
等等
serverError 特殊状态码回调处理
v1.1.2
1. 修复备份完成再次备份时回调顺序问题
v1.1.3
1. public PutUploadRequest(String filePath) {
this.filePath = filePath;
}
public PutUploadRequest(String cellphone,String filePath) {
this.cellphone = cellphone;
this.filePath = filePath;
}
PutUploadRequest 增加构造方法, 可传入cellphone, 不传则使用默认token的cellphone
v1.1.4
1. 紧急修复cellphone上传方案
v1.1.5
1. 修复file文件太大在特殊情况下可能会导致seek()失败
v1.1.6
1. 文件限制策略(接入请参照文件限制策略说明)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。