• 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     }
  • 相关阅读:
    redis quick start
    Distributed processing
    DocFetcher 本机文件搜索工具
    ZeroTier One
    windows下搭建voip服务器
    在公司上wifi
    屏幕录制软件
    openresty vs golang vs nodejs
    DISC测试
    How to implement a windbg plugin
  • 原文地址:https://www.cnblogs.com/chq3272991/p/5694774.html
Copyright © 2020-2023  润新知