1.简单文件上传  上传模型如下。

1.1获得Token

不管是简单文件上传,还是分片上传、断点续传 都需要首先访问服务器,以获得上传凭证信息Token.。用于测试时,可以用本地模拟Token信息(有安全隐患,容易造成数据和空间数据危险)本地模拟Token信息 1.2《本地模拟Token》

1.1.1本地模拟Token.

/*** 获取token 本地生成* * @return*/private String getToken() {Mac mac = new Mac(QiNiuConfig.QINIU_AK, QiNiuConfig.QINIU_SK);PutPolicy putPolicy = new PutPolicy(QiNiuConfig.QINIU_BUCKNAME);putPolicy.returnBody = "{\"name\": $(fname),\"size\": \"$(fsize)\",\"w\": \"$(imageInfo.width)\",\"h\": \"$(imageInfo.height)\",\"key\":$(etag)}";try {String uptoken = putPolicy.token(mac);System.out.println("debug:uptoken = " + uptoken);return uptoken;} catch (AuthException e) {e.printStackTrace();} catch (JSONException e) {e.printStackTrace();}return null;}

1.2简单文件实现上传(参考七牛官方文档)

小于4M,采用简单文件上传模式。从回调中获得上传最后信息,是失败或者是成功。

data = <File对象、或 文件路径、或 字节数组>
String key = <指定七牛服务上的文件名,或 null>;
String token = <从服务端SDK获取>;
UploadManager uploadManager = new UploadManager();
uploadManager.put(data, key, token,
new UpCompletionHandler() {@Overridepublic void complete(String key, ResponseInfo info, JSONObject response) {Log.i("qiniu", info);}
}, null);

回调参数说明:

      参数 说明
key 即uploadManager.put(file, key, …)方法指定的key。key 指定存储在云服务器上的文件名字。并会通过返回值返回出来。
info http请求的状态信息等,可记入日志。isOK()返回 true表示上传成功。
response 七牛反馈的信息。可从中解析保存在七牛服务的key等信息,具体字段取决于上传策略的设置。

1.2.1 记录上传进度  (参考七牛官方文档)

用与进度显示。更新UI进度操作。

uploadManager.put(data, key, token,handler,new UploadOptions(null, null, false,new UpProgressHandler(){public void progress(String key, double percent){Log.i("qiniu", key + ": " + percent);}}, null));

注:progress(key, percent)中的key 即uploadManager.put(file, key, …)方法指定的key

1.2.2取消上传

设置标志位,可以取消上传操作。直接覆盖uploadManager,最后一个上传参数。

private volatile boolean isCancelled;
...
// 某方法中执行取消:isCancelled = true;
...
uploadManager.put(data, key, token,handler,new UploadOptions(null, null, false, progressHandler,new UpCancellationSignal(){public boolean isCancelled(){return isCancelled;}}));

1.2.3记录断点

分片上传中,可将各个已上传的块记录下来,再次上传时,已上传的部分不用再次上传。 断点记录类需实现 com.qiniu.android.storage.Recorder 接口。已提供保存到文件的 FileRecorder 实现。

String dirPath = <断点记录文件保存的文件夹位置>
FileRecorder fr = new FileRecorder(dirPath)
UploadManager uploadManager = new UploadManager(fr);
uploadManager.put(data, key, ...)//默认使用 key 的url_safe_base64编码字符串作为断点记录文件的文件名。避免记录文件冲突(特别是key指定为null时),也可自定义文件名:

UploadManager uploadManager = new UploadManager(fr, new KeyGenerator(){public String gen(String key, File file){// 不必使用url_safe_base64转换,uploadManager内部会处理// 该返回值可替换为基于key、文件内容、上下文的其它信息生成的文件名return key + file.getName();}
});

2.分片文件上传(官方文档解释)

2.1官方相关概念

2.2分片上传相关代码例子 (Demo这里)

得到要上传的文件信息转化为Upload对象。

private void preUpload(Uri uri) {// 此参数会传递到回调String passObject = "test: " + uri.getEncodedPath() + "passObject";String qiniuKey = UUID.randomUUID().toString();PutExtra extra = null;Upload up = UpApi.build(getAuthorizer(), qiniuKey, uri, this, extra, passObject, uploadHandler);addUp(up);}

执行上传操作,UpApi.execuete(up)会根据文件大小,执行分块上传文件操作。

private synchronized void doUpload() {System.out.println("doup: 启动上传任务");for (Upload up : ups) {if (UpApi.isSliceUpload(up)) {String sourceId = generateSourceId(up.getUpParam(), up.getPassParam());List<Block> bls = null;try {bls = load(sourceId);} catch (IOException e) {e.printStackTrace();}// 设置以前上传的断点记录。 直传会忽略此参数
                up.setLastUploadBlocks(bls);}// UpApi.execute(up, bls);Executor executor = UpApi.execute(up);executors.add(executor);}System.out.println("doup: 启动上传任务完毕");start = System.currentTimeMillis();}

3断点续传

参考Demo:这里:

相关代码:

public void doResumableUpload(final Uri uri, PutExtra extra) {uploadUri = uri;final MyBlockRecord record = MyBlockRecord.genFromUri(this, uri);tvUploadInfo.setText("连接中");String key = null;if (extra != null) {extra.params = new HashMap<String, String>();extra.params.put("x:a", "bb");}List<Block> blks = record.loadBlocks();String s = "blks.size(): " + blks.size() + " ==> ";for (Block blk : blks) {s += blk.getIdx() + ", ";}final String pre = s + "\r\n";uploading = true;executor = ResumableIO.putFile(this, auth, key, uri, extra, blks, new CallBack() {@Overridepublic void onSuccess(UploadCallRet ret) {uploading = false;String key = ret.getKey();String redirect = "http://" + MyActivity.bucketName + ".qiniudn.com/" + key;String redirect2 = "http://" + MyActivity.bucketName + ".u.qiniudn.com/" + key;tvUploadInfo.setText(pre + "上传成功! ret: " + ret.toString() + "  \r\n可到" + redirect + " 或  " + redirect2 + " 访问");record.removeBlocks();clean();}@Overridepublic void onProcess(long current, long total) {int percent = (int) (current * 100 / total);tvUploadInfo.setText(pre + "上传中: " + current + "/" + total + "  " + current / 1024 + "K/" + total / 1024 + "K; "+ percent + "%");// int i = 3/0;progressBar.setProgress((int) percent);}@Overridepublic void onBlockSuccess(Block blk) {record.saveBlock(blk);}@Overridepublic void onFailure(CallRet ret) {uploading = false;clean();tvUploadInfo.setText(pre + "错误: " + ret.toString());}});}

转载于:https://www.cnblogs.com/lixiaodaoaaa/p/4224651.html

Android客户端实现七牛云存储文件上传相关推荐

  1. 七牛云文件上传接口的使用

    上传前的准备工作 调用七牛云的上传接口之前,您需要确认以下要求都已完成: 登录 七牛云开发者平台. 创建一个 空间(Bucket).根据您的需求在不同的存储区域创建空间, 存储区域可参考 七牛云存储区 ...

  2. 七牛云 图片上传覆盖

    php使用七牛云上传图片,覆盖云上已有文件: 使用七牛云存储提供的PHP SDK,可以非常方便的将本地文件上传到七牛,但默认情况下,上传的文件不会覆盖旧文件,也就是说,之前上传了一个名为photo.j ...

  3. php七牛云批量上传,七牛云——批量将本地图片上传到七牛云

    前言 在本地大概有10w左右的头像图片,打算批量上传到七牛云,寻找后发现了一个神奇的官方工具,十分的好用 工具 资源批量上传和多文件上传 我这里上传本地用的是QsunSync QsunSync Git ...

  4. C#使用七牛云存储上传下载文件、自定义回调

    项目需要将音视频文件上传服务器,考虑并发要求高,通过七牛来实现. 做了一个简易的压力测试,同时上传多个文件,七牛自己应该有队列处理并发请求,我无论同时提交多少个文件,七牛是批量一个个排队处理了. 一个 ...

  5. Linux七牛云批量上传api,使用七牛qshell 本地文件 批量上传到七牛云 已解决

    在之前项目中有使用郭这个命令, 因此找问题 直接定位在 qshell 这个方法, 这次项目中要的需要把对应的本地图片和七牛云同步,其实为了解决微信小程序访问图片的快的原因,七牛的图片是走的CDN节点. ...

  6. 小程序对七牛云文件上传删除批量删除生成token封装无需服务器一个小程序搞定

    微信小程序获取token接入七牛云上传删除批量删除图片封装亲测可用 小程序获取七牛云uptoken删除文件封装 在研究官方文档后自己用小程序生成uptoken上传凭证封装,其他资料都说要服务器我又没钱 ...

  7. Python联调七牛云异步上传文件

    注:本篇文章参考文献 乾坤大挪移,如何将同步阻塞(sync)三方库包转换为异步非阻塞(async)模式?Python3.10实现.-刘悦. 首先需要拥有一个七牛云的账号 七牛云官网:七牛云 | 一站式 ...

  8. tp框架文件上传七牛服务器,TP5开发 - 七牛云图片上传方法

    1.config.php配置文件里配置七牛云密钥等 里面 secretKey accessKey domain bucket对应换成自己七牛云申请的, 步骤: (1)七牛云注册成功后-对象存储申请10 ...

  9. Js上传图片到七牛云(直接上代码)

    准备工作: 1.七牛云传图片有多种方式,分为前端上传和后端上传,采用前端上传的最大的好处就是将减轻了服务器压力. 2.由于有些小朋友不想看官网的代码(本人认为官网好多"废话"'), ...

最新文章

  1. 一个分析“文件夹”选择框实现方法的过程
  2. mybatis 源码分析, 初始化
  3. linux find d,Linux find命令傻瓜入门
  4. 三阶魔方还原步骤图_研究人员开发的AI成功在1.2秒内还原三阶魔方
  5. 25q64存储多个数据_一篇文章看懂,存储虚拟化在不同用例中的实践与优势
  6. 我死了,你会娶别的女人吗?
  7. ASP.NET MVC 5 学习教程:修改视图和布局页
  8. 【CQOI2017】小Q的表格
  9. 网站发布后验证码不显示
  10. 自动布局和view 设置frame同时有效
  11. 2016年中国大学生程序设计竞赛(合肥)-重现赛
  12. Microsoft Office Visio 2007 下载
  13. 闭包及候选键求解方法
  14. 楚门的世界/The Truman Show (1998)
  15. 计算机学院文化长廊,计算机学院2019年寝室文化节动员大会顺利召开
  16. VMware 14 Pro 永久许可证激活密钥
  17. numpy库函数:reshape用法
  18. 爬虫开发02--数据解析--xpath(首选)
  19. unity2d随机生成物体_unity2D游戏关卡地图编辑随机生成系统Strata Easy 2D Level Generator 1.3...
  20. 【论文笔记】—毫米波雷达穿雾式高分辨率成像—Supervised—HawkEye系统—2020-CVPR

热门文章

  1. struts 修改拦截器修改返回值_关于struts2简单的介绍与示例
  2. brew更新的时候不更新某个应用_这样用 Git 想不升职加薪都难!
  3. POJ3522Slim Span(最大边与最小边差值最小的生成树)
  4. 信息系统项目管理师优秀论文:沟通与干系人管理
  5. Vue中使用moment将时间戳数据格式化显示(el-table中)
  6. Android中怎样使用createTempFile实现将字节数据创建到临时文件并转换成FileOutputStream和FileInputStream
  7. SSM+KindEditor实现富文本编辑器图片上传
  8. IDEA中安装Restfultookit插件实现根据 URL 直接跳转到对应的方法定义
  9. 测试Mybatis时事务自动回滚,无法完成增删改
  10. 软考-信息系统项目管理师-项目整体管理