asynchttpClient框架关于多文件批量上传的问题,改用xUtil

 1 RequestParams params = new RequestParams();
 2         params.add("ordernum",ordernum);
 3         params.add("username",username);
 4         for(int i=0; i<filesList.size();i++){
 5             try {
 6                 params.put("images[" + i + "]",filesList.get(i),"application/octet-stream");
 7             } catch (FileNotFoundException e) {
 8                 e.printStackTrace();
 9             }
10             Log.i(MyConfig.TagPic,"打印准备上传的图片资料流:"+filesList.get(i).getPath());
11         }
12         MyBaseClient.post(MyConfig.urlDataUpload,params,new AsyncHttpResponseHandler(){
13             @Override
14             public void onStart() {
15                 super.onStart();
16             }
17 
18             @Override
19             public void onProgress(int bytesWritten, int totalSize) {
20                 super.onProgress(bytesWritten, totalSize);
21                 int count = (int) ((bytesWritten * 1.0 / totalSize) * 100);
22                 // 上传进度显示
23                 progressBar.setProgress(count);
24                 tv_progress.setText("正在上传资料....."+count+"%");
25                 Log.i("上传 Progress>>>>>", "count="+count+"--"+bytesWritten + " / " + totalSize);
26             }
27 
28             @Override
29             public void onSuccess(int statusCode, String content) {
30                 super.onSuccess(statusCode, content);
31                 Log.i("main","成功了");
32                 mDialog.dismiss();
33                
34             }
35 
36             @Override
37             public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
38                 super.onFailure(statusCode, headers, responseBody, error);
39                 mDialog.dismiss();
40             }
41         });

最近使用asynchttpClient提交表单上传图片,发现存在上传多张图片,会少上传一两张的情况,貌似是这框架的BUG;

改用xUtil可以成功上传;

 1 String ordernum = model.getOrdernum();
 2         String username = model.getUsername();
 3         RequestParams params = new RequestParams();
 4         params.addBodyParameter("ordernum",ordernum);
 5         params.addBodyParameter("username",username);
 6         for(int i=0; i<filesList.size();i++){
 7             params.addBodyParameter("images[" + i + "]",filesList.get(i));
 8             Log.i(MyConfig.TagPic,"打印准备上传的图片资料流:"+filesList.get(i).getPath());
 9         }
10         HttpUtils http = new HttpUtils();
11         http.send(HttpRequest.HttpMethod.POST, MyConfig.urlDataUpload, params,
12                 new RequestCallBack<String>() {
13 
14                     @Override
15                     public void onSuccess(ResponseInfo<String> responseInfo) {
16                         Log.i("main","当前结果:"+responseInfo.result);
17                         mDialog.dismiss();
18                         netTask();
19                         isUpload = false;
20                         hasCompress = false;
21                         mSelectPath.clear();
22                         filesList.clear();
23                         mHashMapCompress.clear();
24                         adapter.notifyDataSetChanged();
25                         tv_right_submit.setEnabled(true);
26                         //删除手机下面的小图片
27                         if(!MyConfig.OpenDebugging){
28                             FileUtil.deleteFileDir(MyConfig.PicFileSmallDir,false);
29                         }
30                     }
31 
32                     @Override
33                     public void onLoading(long total, long current, boolean isUploading) {
34                         super.onLoading(total, current, isUploading);
35                         int count = (int) ((current * 1.0 / total) * 100);
36                         // 上传进度显示
37                         progressBar.setProgress(count);
38                         tv_progress.setText("正在上传资料....."+count+"%");
39                         Log.i("上传 Progress>>>>>", "count="+count+"--"+current + " / " + total);
40                     }
41 
42                     @Override
43                     public void onFailure(HttpException e, String s) {
44                         mDialog.dismiss();
45                     }
46                 });

附:thinkphp接口:

 1 //上传资料
 2     public function upload()
 3     {
 4         $config = array(
 5             //'rootPath' => 'E:/phpStudy/www/yne_siteM/uploads/scan/'.'file/',
 6             'rootPath' => 'D:/www/yne_siteM/uploads/scan/'.'file/',
 7         );
 8         $upload = new ThinkUpload($config);
 9         // 实例化上传类
10         $upload->maxSize   =     3145728 ;// 设置附件上传大小
11         $upload->exts      =     array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
12         $upload->savePath  =     'imgs'; // 设置附件上传(子)目录
13         // 上传文件
14         $info = $upload->upload();
15         if(!$info) {// 上传错误提示错误信息
16             $this->error($upload->getError());
17         }else{
18             // 上传成功 获取上传文件信息
19             foreach($info as $file){
20                 echo $file['savepath'].$file['savename'];
21 
22                 $db = M('order');
23                 $data['materialurl'] = 'uploads/scan/file/'.$file['savepath'].$file['savename'];
24                 $where['username'] = $_POST['username'];
25                 $where['ordernum'] = $_POST['ordernum'];
26                 $da = $db->field('materialurl')->where($where)->select();
27                 if($da){
28                     $datas['materialurl'] = $da[0]['materialurl'].'|'.$data['materialurl'];
29                     $tis = $db->where($where)->save($datas);
30                 }else{
31                     $tis = $db->where($where)->save($data);
32                 }
33             }
34         }
35         /*$db1 = M('order');
36         $d = $db1->field('materialurl')->where($where)->select();*/
37         if($tis){
38             $response['status'] = 'Y';
39             $response['msg'] = '成功';
40             $response['data'] = $tis;
41             echo json_encode($response);
42         }else{
43             $response['status'] = 'N';
44             $response['msg'] = '失败';
45             echo json_encode($response);
46         }
47         //    $this->ajaxReturn(true);
48 
49         // "file"名字必须和iOS客户端上传的name一致
50         /*if (($_FILES["file"]["type"] == "image/gif")
51             || ($_FILES["file"]["type"] == "image/jpeg")
52             || ($_FILES["file"]["type"] == "image/png")
53             || ($_FILES["file"]["type"] == "imagepeg"))
54         {
55             if ($_FILES["file"]["error"] > 0) {
56                 echo $_FILES["file"]["error"]; // 错误代码
57             } else {
58                 $fillname = $_FILES['file']['name']; // 得到文件全名
59                 $dotArray = explode('.', $fillname); // 以.分割字符串,得到数组
60                 $type = end($dotArray); // 得到最后一个元素:文件后缀
61 
62                 $path = "E:/phpStudy/www/yne_siteM/uploads/scan/".md5(uniqid(rand())).'.'.$type; // 产生随机唯一的名字
63 
64                 move_uploaded_file( // 从临时目录复制到目标目录
65                     $_FILES["file"]["tmp_name"],$path);
66                 echo "成功";
67             }
68         } else {
69             echo "文件类型不正确";
70         }*/
71     }
原文地址:https://www.cnblogs.com/chq3272991/p/5694774.html