4 Star 1 Fork 0

bill / WoLibSdkDemo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

woLib文档说明

简介

  • 本文档主要介绍对象存储 Android SDK的安装和使用。必需创建 token , 文中的 token 指的是 用户token。

环境

  • 上传sdk已兼容android 10系统, 无需做额外配置

安装

  • 直接导入编译好的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文档


### 对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主线程

相册备份使用

注意:

  • 相册备份sdk只备份相册文件,不涉及客户端相关业务逻辑
  • 所有操作均需客户端主动调用
  • 断网、联网重传相关业务逻辑需客户端自行实现

开始备份

 //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";//注册备份设备错

排查bug

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实现方法!

更新日志

20201014 更新

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

20201016 更新

v1.0.3(2020.1016)

wolib 初始化增加回调接口 IInitCallback

uploadManager去除config, config统一在wolib中初始化,  uploadRequest参数修改, 只需要一个filePath或者uri 即可完成上传

备份去除所有业务逻辑, 只保留基本的备份功能

具体使用详情可查看demo和readme文档

20201021 更新

v1.0.3(2020.1021)

- 增加获取文件类型方法
   com.cloud.wolibrary.util.FileTypeUtils;
   int type = FileTypeUtils.getFileType(fileName)

20201027 更新

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();

20201029 更新

v1.0.4

 uploadRequest 增加 extraMap 字段
    private Map<String, Object> extraMap = new HashMap<>();
    public Map<String, Object> getExtraMap() {
        return extraMap;
    }

20201103 更新

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) {

                   }
               };

20201112 更新

v1.0.6

- config 增加 setHost() 方法用于动态配置主域名, 默认值为 https://b.smartont.net
- woLib 删除 setDebug() 方法

20201118 更新

v1.0.7

 fileBean 添加 backupAlbum字段

20201119 更新

v1.0.7

 备份和上传前, 对token和服务器返回手机号码增加判断是否为null或者""

20201120 更新

v1.0.8

   1. 备份文件增加单独各一个文件的进度监听
    public interface IBackupResultCallback {

       void backupFileProgress(FileBean fileBean, UploadProgress progress);

       ......
    }

    2. 对上传注册接口参数进行打印, 增加排查日志对比文档

20201125 更新

v1.0.9

1. resumeRequest(uploadId)增加createTaskSuccess回调, 回调的结果就是调用者传入的uploadId
2. 重试版本中增加了手动暂停回调, 日志优化

20201217 更新

v1.1.0

1. 优化特殊文件的处理方式

20210119 更新

v1.1.1

         //200 请求成功
          //201 上传分片成功
          //400 参数错误
          //401 用户校验错误
          //405 http method不支持
          //495 云盘过期
          //496 云盘空间不足
          //497 上传分片数据不完整
          //498 未绑定云盘
          //500 服务器错误
          等等

          serverError 特殊状态码回调处理

20210121 更新

v1.1.2

    1. 修复备份完成再次备份时回调顺序问题

20210122 更新

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

20210125 更新

v1.1.4

    1. 紧急修复cellphone上传方案

20210428 更新

v1.1.5

    1. 修复file文件太大在特殊情况下可能会导致seek()失败

20210511 更新

v1.1.6

    1. 文件限制策略(接入请参照文件限制策略说明)

空文件

简介

WoLib 上传 备份sdk 展开 收起
Java 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/bill-zz/wo-lib-sdk-demo.git
git@gitee.com:bill-zz/wo-lib-sdk-demo.git
bill-zz
wo-lib-sdk-demo
WoLibSdkDemo
master

搜索帮助