七牛上傳圖片初探 開始上傳 暫停上傳 繼續上傳
阿新 • • 發佈:2018-11-27
效果
程式碼
public class MainActivity extends AppCompatActivity { ListView listview; AlbumList albumList; @Override protected 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請求獲取, 這裡為了演示直接指定key private 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; } @Override public int getCount() { return imgList.size(); } @Override public Object getItem(int i) { return imgList.get(i); } @Override public long getItemId(int i) { return i; } @Override public 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() { @Override public 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型別,檔案大小等資訊,具體欄位取決上傳策略的設定; */ @Override public 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 上傳進度; */ @Override public void progress(String key, double percent) { //上傳進度相關 } }; upCancellationSignal = new UpCancellationSignal() { @Override public boolean isCancelled() { //控制取消上傳,取消之後就不能再上傳了 return isProgressCancel; } }; //定義資料或檔案上傳時的可選項 uploadOptions = new UploadOptions( null, //擴充套件引數,以x:開頭的使用者自定義引數 "mime_type", //指定上傳檔案的MimeType true, //是否啟用上傳內容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}