效果

代码

public class MainActivity extends AppCompatActivity {ListView listview;AlbumList albumList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();initView();}private void initData() {List<AlbumList.ImgListBean> list = new ArrayList<>();for (int i = 0; i < 3; i++) {List<String> pictures = ImgHandleUtils.getPictures(Environment.getExternalStorageDirectory() + "/新文件夹");AlbumList.ImgListBean imgListBean = new AlbumList.ImgListBean();imgListBean.setImgUrlList(pictures);imgListBean.setDirName("金地小城");list.add(imgListBean);}albumList = new AlbumList();albumList.setImgList(list);}private void initView() {listview = (ListView) findViewById(R.id.listview);ListViewAdapter adapter = new ListViewAdapter(this, albumList.getImgList());listview.setAdapter(adapter);}
}
public class ListViewAdapter extends BaseAdapter {private Context mContext;private List<AlbumList.ImgListBean> imgList;//指定upToken, 强烈建议从服务端提供get请求获取, 这里为了演示直接指定keyprivate static String uptoken = "um6IEH7mtwnwkGpjImD08JdxlvViuELhI4mFfoeL:NCnWTr1D3jR_9_dxj6geIgPBQq4=:eyJzY29wZSI6ImFuZHJvaWRkZW1vIiwiZGVhZGxpbmUiOjIzMDk5MjE5MTIsInJldHVybkJvZHkiOiJ7IFwiaGFzaFwiOiQoZXRhZyksXCJrZXlcIjokKGtleSksXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImZzaXplXCI6JChmc2l6ZSl9In0=";private UploadManager uploadManager;  //七牛SDK的上传管理者private UploadOptions uploadOptions;  //七牛SDK的上传选项private UpProgressHandler upProgressHandler;  //七牛SDK的上传进度监听private UpCancellationSignal upCancellationSignal;  //七牛SDK的上传过程取消监听private boolean isProgressCancel = false;  //网络请求过程中是否取消上传或下载public ListViewAdapter(Context context, List<AlbumList.ImgListBean> imgList) {this.mContext = context;this.imgList = imgList;}@Overridepublic int getCount() {return imgList.size();}@Overridepublic Object getItem(int i) {return imgList.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(final int i, View view, ViewGroup viewGroup) {final ViewHolder holder;if (view == null) {view = LayoutInflater.from(mContext).inflate(R.layout.listview_item, viewGroup, false);holder = new ViewHolder();holder.item_img = view.findViewById(R.id.item_img);holder.item_tv_name = view.findViewById(R.id.item_tv_name);holder.item_tv_count = view.findViewById(R.id.item_tv_count);holder.probar_upload = view.findViewById(R.id.probar_upload);holder.tv_progress = view.findViewById(R.id.tv_progress);holder.tv_upload = view.findViewById(R.id.tv_upload);view.setTag(holder);} else {holder = (ViewHolder) view.getTag();}final AlbumList.ImgListBean imgListBean = imgList.get(i);Glide.with(mContext).load(new File(imgListBean.getImgUrlList().get(0))).placeholder(R.mipmap.ic_launcher).into(holder.item_img);holder.item_tv_name.setText(imgListBean.getDirName());holder.item_tv_count.setText(imgListBean.getImgUrlList().size() + "");holder.tv_upload.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (holder.tv_upload.getText().equals("上传")) {holder.tv_upload.setText("暂停");//开始上传holder.probar_upload.setMax(imgListBean.getImgUrlList().size());if (!isInitUpload) {initUpload();}upload(imgListBean.getImgUrlList(), holder.probar_upload, holder.tv_progress, holder.tv_upload);} else if (holder.tv_upload.getText().equals("暂停")) {holder.tv_upload.setText("继续");//暂停上传isProgressCancel = true;Toast.makeText(mContext, (currentIndex + ""), Toast.LENGTH_SHORT).show();} else if (holder.tv_upload.getText().equals("继续")) {holder.tv_upload.setText("暂停");//继续上传Toast.makeText(mContext, (currentIndex + ""), Toast.LENGTH_SHORT).show();isProgressCancel = false;upload(imgListBean.getImgUrlList(), holder.probar_upload, holder.tv_progress, holder.tv_upload);}}});return view;}private int currentIndex = 0;//当前上传到第几张照片,默认从0开始private boolean isInitUpload = false;/*** 上传方法** @param imgUrlList    单个相册的图片路径集合* @param probar_upload* @param tv_progress*/private void upload(final List<String> imgUrlList, final ProgressBar probar_upload, final TextView tv_progress, final TextView tv_upload) {uploadManager.put(new File(imgUrlList.get(currentIndex)), null, uptoken, new UpCompletionHandler() {/*** 主线程执行** @param key      UploadManager.put()方法中指定的key,也就是上传到七牛服务器上的文件名;* @param info     Json串表示的上传信息,包括使用版本,请求状态,请求Id等信息;* @param response Json串表示的文件信息,包括文件Hash码,保存在七牛服务的key,文件Mime类型,文件大小等信息,具体字段取决上传策略的设置;*/@Overridepublic void complete(String key, ResponseInfo info, JSONObject response) {if (info.isOK()) {Log.e("QINIULOG:", key + "!\n" + info + "!\n" + response + "!");currentIndex++;probar_upload.setProgress(currentIndex);tv_progress.setText(currentIndex + "/" + imgUrlList.size());if (currentIndex < imgUrlList.size()) {upload(imgUrlList, probar_upload, tv_progress, tv_upload);//递归上传} else {currentIndex = 0;//重置tv_upload.setText("上传完成");}} else {Log.e("QINIULOG:", "上传失败:" + info.statusCode);}}}, uploadOptions);}private static class ViewHolder {private ImageView item_img;private TextView item_tv_name;private TextView item_tv_count;private ProgressBar probar_upload;private TextView tv_progress;private TextView tv_upload;}/*** 初始化上传配置,只需初始化一次就可以*/private void initUpload() {isInitUpload = true;uploadManager = new UploadManager();upProgressHandler = new UpProgressHandler() {/*** 主线程执行* @param key 上传时的upKey;* @param percent 上传进度;*/@Overridepublic void progress(String key, double percent) {//上传进度相关}};upCancellationSignal = new UpCancellationSignal() {@Overridepublic boolean isCancelled() {//控制取消上传,取消之后就不能再上传了return isProgressCancel;}};//定义数据或文件上传时的可选项uploadOptions = new UploadOptions(null,  //扩展参数,以x:开头的用户自定义参数"mime_type",  //指定上传文件的MimeTypetrue,  //是否启用上传内容crc32校验upProgressHandler,  //上传内容进度处理upCancellationSignal  //取消上传信号);}
}

上传成功后七牛返回的信息

ResponseInfo info 信息{ver:7.3.10,ResponseInfo:1507880162533195,status:200,reqId:a30AAJ89bN4BEe0U,xlog:body:1;s.ph;s.put.tw;s.put.tr:2;s.put.tw;s.put.tr:5;s.ph;PFDS:5;PFDS:7;rs36_16.sel:4/not found;rdb.g:1/no such key;DBD:1/404;v4.get:1/Document not found;rs36_16.ins:9;rwro.ins:15;RS:16;rs.put:16;rs-upload.putFile:24;UP:28, xvia:bc488,vdn-jssz-mob-1-6,host:upload.qiniup.com,path:/,ip:xxxxxxx,port:80,duration:214 s,time:1507880164,sent:233531,error:null}JSONObject response 信息{"hash":"Fsu2LPwvk331ltLR50VLT2FHpFxB","key":"Fsu2LPwvk331ltLR50VLT2FHpFxB","mimeType":"image\/jpeg","fsize":232869}

注意事项:

七牛对上传的图片做了限制,当图片大于4M的时候,会自动使用断点上传,上传过程会比较慢,如果小于4M,会使用Form上传,速度比较快。所以如果允许的话尽量将图片大小控制在4M以内,方便上传。

七牛上传图片初探 开始上传 暂停上传 继续上传相关推荐

  1. 七牛上传图片html,MWEB+七牛 上传图片

    MWEB+七牛 上传图片 博客之前的图片也都用的七牛,但编辑和上传分离还是很麻烦,所以一直很心水meb, 上周mweb降到50¥,感觉短期内应该不会再降了,于是果断入手,今天在和使用图床功能遇到了一些 ...

  2. Android使用七牛上传图片踩坑及解决方案

    Android开发上传图片到七牛的步骤 1. 集成七牛SDK compile 'com.qiniu:qiniu-android-sdk:7.3.+' 2. 获得上传凭证token用于上传图片到七牛 这 ...

  3. Taro 项目实现更改微信头像,使用七牛上传图片

    一.效果图 二.taro 提供了选择图片的接口 https://taro-docs.jd.com/taro/docs/apis/media/image/chooseImage // 文档提供的示例 T ...

  4. HTML 七牛上传图片

    好记忆不如按烂笔头 ... ... 简介 七牛图片云存储,云操作做的还是很牛叉的,http://www.qiniu.com/ 没有为人打广告的意思. 给你一个上传图片的token ,就能往上面放置你的 ...

  5. 使用Simditor和七牛上传图片

    2019独角兽企业重金招聘Python工程师标准>>> Simditor是tower开源的一款网页编辑器官方网址:http://simditor.tower.im 为了使Simdit ...

  6. 七牛上传图片html,使用七牛云上传图片

    七牛云提供的空间还是很不错的.最近闲来无事,看了下七牛的相关东西,现把图片上传的部分记录一下 使用七牛云需要自己注册账号,这个就不再赘述,很简单的 申请好空间之后,上传需要一个上传凭证,七牛真的很体贴 ...

  7. simditor上传图片php,使用Simditor和七牛上传图片

    Simditor是tower开源的一款网页编辑器官方网址:http://simditor.tower.im 为了使Simditor编辑文档时能将图片自动从前端上传到qn,需要修改它的uploader. ...

  8. vue 七牛上传图片

    这是我多年前写的 很多都忘了 从github找出来的 <template><div><w-subnav ref="subNav"></w- ...

  9. 七牛HTML 上传按钮,七牛 JSSDK 配置+常见问题

    作者:娇娇jojo 时间:2018年6月19日 一.铺垫 依靠七牛上传图片,其实有很多方法,先说说有哪些方法,以及这些方法各自的优缺点吧(移动端). way1:前端只负责选择图片,然后将图片传给服务端 ...

最新文章

  1. 【以太坊】深入理解智能合约(合约调合约)
  2. python battleship_codecademy_python_Battleship!
  3. 在计算机系统中使用防病毒软件的作用,防病毒软件的作用是 江苏省网络与信息安全技能竞赛题库(5)...
  4. ubuntu安装mysql,error: No curses/termcap library found报错
  5. 用python简单处理图片(2):图像通道\几何变换\裁剪
  6. Android开发之自定义输入框无法弹起键盘输入法的解决方法
  7. P4640-[BJWC2008]王之财宝【OGF,Lucas定理】
  8. Suse系统用户不能登录报错
  9. 利用MATLAB实现Sobel边缘检测
  10. 真解决EasyUi的 select 使用 class=“easyui-combobox“ 样式绑定onSelect/onChange事件
  11. Google设置新标签页默认地址
  12. SQL语句基础1:对数据库和表的增删改操作,初始化时约束和数据的加入
  13. codeforces水题100道 第九题 Codeforces Beta Round #63 (Div. 2) Young Physicist (math)
  14. EasyExcel动态导出-动态头
  15. 产品经理入门:二、一个需求的奋斗史
  16. excel 多列内容合并为一个单元格
  17. 小程序引入字体集方式
  18. 如何通过ua区分QQ内置浏览器与QQ浏览器
  19. 【XSY2538】/【HDU6155】Subsequence Count(矩阵乘法+线段树)
  20. scipy.sparse学习

热门文章

  1. 开源库3dTagCloudAndroid使用,实现3D球形云标签tag效果
  2. js什么是闭包?简单理解
  3. 数据库范式讲解(1NF、2NF、3NF、BCNF)
  4. 距离(distance)算法小结
  5. 笔记本HDMI1.4 1080p下外接高刷显示器的实现方法之一
  6. 热烈庆祝女朋友的生日
  7. 0514课堂笔记--抽象类-接口
  8. 咪咕版kindle利用“隐藏浏览器”打开微信读书
  9. 《R数据科学》学习笔记|Note5:使用dplyr进行数据转换(下)
  10. 渗透测试SQL注入——Sqlilabs关卡详解