RequestParams params = new RequestParams();
params.add("ordernum",ordernum);
params.add("username",username);
for(int i=0; i<filesList.size();i++){
try {
params.put("images[" + i + "]",filesList.get(i),"application/octet-stream");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Log.i(MyConfig.TagPic,"打印准备上传的图片资料流:"+filesList.get(i).getPath());
}
MyBaseClient.post(MyConfig.urlDataUpload,params,new AsyncHttpResponseHandler(){
@Override
public void onStart() {
super.onStart();
} @Override
public void onProgress(int bytesWritten, int totalSize) {
super.onProgress(bytesWritten, totalSize);
int count = (int) ((bytesWritten * 1.0 / totalSize) * 100);
// 上传进度显示
progressBar.setProgress(count);
tv_progress.setText("正在上传资料....."+count+"%");
Log.i("上传 Progress>>>>>", "count="+count+"--"+bytesWritten + " / " + totalSize);
} @Override
public void onSuccess(int statusCode, String content) {
super.onSuccess(statusCode, content);
Log.i("main","成功了");
mDialog.dismiss(); } @Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
super.onFailure(statusCode, headers, responseBody, error);
mDialog.dismiss();
}
});

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

改用xUtil可以成功上传;

 String ordernum = model.getOrdernum();
String username = model.getUsername();
RequestParams params = new RequestParams();
params.addBodyParameter("ordernum",ordernum);
params.addBodyParameter("username",username);
for(int i=0; i<filesList.size();i++){
params.addBodyParameter("images[" + i + "]",filesList.get(i));
Log.i(MyConfig.TagPic,"打印准备上传的图片资料流:"+filesList.get(i).getPath());
}
HttpUtils http = new HttpUtils();
http.send(HttpRequest.HttpMethod.POST, MyConfig.urlDataUpload, params,
new RequestCallBack<String>() { @Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Log.i("main","当前结果:"+responseInfo.result);
mDialog.dismiss();
netTask();
isUpload = false;
hasCompress = false;
mSelectPath.clear();
filesList.clear();
mHashMapCompress.clear();
adapter.notifyDataSetChanged();
tv_right_submit.setEnabled(true);
//删除手机下面的小图片
if(!MyConfig.OpenDebugging){
FileUtil.deleteFileDir(MyConfig.PicFileSmallDir,false);
}
} @Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
int count = (int) ((current * 1.0 / total) * 100);
// 上传进度显示
progressBar.setProgress(count);
tv_progress.setText("正在上传资料....."+count+"%");
Log.i("上传 Progress>>>>>", "count="+count+"--"+current + " / " + total);
} @Override
public void onFailure(HttpException e, String s) {
mDialog.dismiss();
}
});

附:thinkphp接口:

 //上传资料
public function upload()
{
$config = array(
//'rootPath' => 'E:/phpStudy/www/yne_siteM/uploads/scan/'.'file/',
'rootPath' => 'D:/www/yne_siteM/uploads/scan/'.'file/',
);
$upload = new \Think\Upload($config);
// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->savePath = 'imgs'; // 设置附件上传(子)目录
// 上传文件
$info = $upload->upload();
if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
}else{
// 上传成功 获取上传文件信息
foreach($info as $file){
echo $file['savepath'].$file['savename']; $db = M('order');
$data['materialurl'] = 'uploads/scan/file/'.$file['savepath'].$file['savename'];
$where['username'] = $_POST['username'];
$where['ordernum'] = $_POST['ordernum'];
$da = $db->field('materialurl')->where($where)->select();
if($da){
$datas['materialurl'] = $da[0]['materialurl'].'|'.$data['materialurl'];
$tis = $db->where($where)->save($datas);
}else{
$tis = $db->where($where)->save($data);
}
}
}
/*$db1 = M('order');
$d = $db1->field('materialurl')->where($where)->select();*/
if($tis){
$response['status'] = 'Y';
$response['msg'] = '成功';
$response['data'] = $tis;
echo json_encode($response);
}else{
$response['status'] = 'N';
$response['msg'] = '失败';
echo json_encode($response);
}
// $this->ajaxReturn(true); // "file"名字必须和iOS客户端上传的name一致
/*if (($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "imagepeg"))
{
if ($_FILES["file"]["error"] > 0) {
echo $_FILES["file"]["error"]; // 错误代码
} else {
$fillname = $_FILES['file']['name']; // 得到文件全名
$dotArray = explode('.', $fillname); // 以.分割字符串,得到数组
$type = end($dotArray); // 得到最后一个元素:文件后缀 $path = "E:/phpStudy/www/yne_siteM/uploads/scan/".md5(uniqid(rand())).'.'.$type; // 产生随机唯一的名字 move_uploaded_file( // 从临时目录复制到目标目录
$_FILES["file"]["tmp_name"],$path);
echo "成功";
}
} else {
echo "文件类型不正确";
}*/
}

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

  1. 文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)--SNF快速开发平台3.0

    实际上在SNF里使用附件管理是非常简单的事情,一句代码就可以搞定.但我也要在这里记录一下统一附件管理器能满足的需求. 通用的附件管理,不要重复开发,调用尽量简洁. 批量文件上传,并对每个文件大小限制, ...

  2. SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    需求: 文件批量上传,支持断点续传. 文件批量下载,支持断点续传. 使用JS能够实现批量下载,能够提供接口从指定url中下载文件并保存在本地指定路径中. 服务器不需要打包. 支持大文件断点下载.比如下 ...

  3. 带进度条的文件批量上传插件uploadify

    有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...

  4. 文件批量上传的工具,要实现暂停继续、断点续传等功能(使用QtNetwork和QHttpMultiPart,和定时器检查超时)

    最近在做一个文件批量上传的工具,要实现暂停继续.断点续传等功能.利用Qt自带的QtNetwork模块,完成这些需求并没有费多少周章,主要思路就是将文件分块,然后用while循环依次传输.具体实现代码比 ...

  5. 使用WebUploader实现文件批量上传,进度条显示功能

    知识点:利用WebUploader,实现文件批量上传,并且实时显示文件的上传进度 参考官方文档:http://fex.baidu.com/webuploader/ (1)引入三个资源 JS,CSS,S ...

  6. jquery文件批量上传控件Uploadify3.2(java springMVC)

    人比較懒  有用为主 不怎么排版了 先放上Uploadify的官网链接:http://www.uploadify.com/  -->里面能够看到PHP的演示样例,属性说明,以及控件下载地址.分f ...

  7. 利用uploadify+asp.net 实现大文件批量上传。

    前言 现在网上文件上传组件随便一搜都是一大堆,不过看大家一般都在用uploadify这个来上传文件.由于项目需要,我在来试了一下.因为第一次使用,也遇到了很多问题,特此记录! ------------ ...

  8. uploadify文件批量上传

    uploadify能够时间文件的批量上传,JS文件包下载地址,使用说明可以参考官网文档(http://www.uploadify.com/documentation/) 使用方法如下代码: $(&qu ...

  9. 关于在Struts2框架下实现文件的上传功能

    struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 <?xml version="1.0" encoding=" ...

随机推荐

  1. android studio 代理配置

    android studio 代理设置,只支持http代理,不能用ss服务 中间加一层http转换 1远端ss 2client ss 端口 A 3client privoxy服服 代理ss A端口 到 ...

  2. 一个有趣的基于C++的模拟发牌程序

    在内存中模拟出一副牌,然后模拟洗牌,发牌等动作. 流程是这样的:构建一副牌保存到一个数组中—洗牌—创建玩家—向玩家发牌–输出每个玩家的牌. #include <stdio.h> #incl ...

  3. JavaScript parseInt() toString()函数

    parseInt(string, radix) string:必需.要被解析的字符串 radix:可选.表示要解析的数字的基数.该值介于 2 ~ 36 之间. 如果省略该参数或其值为 0,则数字将以 ...

  4. iOS富文本的使用

    NSString *name = nil; if (_payNumber == 1) { name = [NSString stringWithFormat:@"向%@收款",na ...

  5. 浏览器对象模型BOM

    第二章 浏览器对象模型BOM 1.作用:操作窗口:提供导航对象:提供定位对象:浏览器上方的地址栏:提供跟屏幕相关对象:提供对Cookie的支持 2.根元素:window:代表整个窗口:window,o ...

  6. Base64编码通过URL传值的问题

    base64 编码中使用了 +号,+号通过URL传递时会变成空格,因为编码的方式的问题前台使用:Ext.encode(title_text.getValue().replace(/\+/g, '%2B ...

  7. window 2003 配置FTP +防火墙设置

    2保险的做法是 不允许匿名登录,吧钩去掉 后面我们会添加一个用户,并且赋予权限 3 主目录 可以设置时当前计算机目录或者是另一台计算机目录(映射) FTP站点目录:浏览定位FTP文件所在站点,给予是否 ...

  8. EasyUI 后台接受DataGrid传来的参数

    string ad = Context.Request.QueryString["rows"];不行 string aedf = Context.Request.Form[&quo ...

  9. springMVC验证码程序

    原文地址:http://my.oschina.net/u/1757031/blog/488322 import java.awt.Color; import java.awt.Font; import ...

  10. 个人博客作业week5

    请阅读下述关于敏捷开发方法文章,并在个人博客上写一篇读后感. Martin Fowler:  http://martinfowler.com/agile.html 截止时间:10月20日前.