使用HttpClient MultipartEntity 上传图片 类似于表单提交

原创 2016年08月30日 14:10:00

1.如果你使用Android studio 开发的话 并且你的api版本是,21以上的话 HttpClient 这个是过时的方法 不会被识别 需要在buile.gradle里面添加:

compile 'org.apache.httpcomponents:httpcore:4.4.5'

2.解决以上问题.具体代码如下:

/**
     * 请求地址:api/Mobile/uploadPic
     * 请求类型:post
     * 必须参数:pic,文件域键名
     */
    private CommResult uploadPic(String imagepath) {
        Log.d(TAG, "图片本地地址:" + (uploadIndex + 1) + "    " + imagepath);
        if (!isNetworkConnected(mContext)) {
            ToastUtils.showShort(mContext, "无网络链接!");
            return null;
        }
        Gson gson = new Gson();
        if (imagepath == null || imagepath.equals("")) {
            return null;
        }
        String url = null;
        url = "http://" + BaseApplication.getInstance().mUtil.getArea() + "/api/Mobile/uploadPic";
//        url = url.replace(" ", "%20");

        // 判断图片路径是否存在
        if (!FileUtils.isFileExist(imagepath, true)) {
            Log.d(TAG, "不存在的图片:" + imagepath);
            mHandler.sendEmptyMessage(0);
            return null;
        }

        HttpClient httpclient = new DefaultHttpClient();
        HttpContext localContext = new BasicHttpContext();
        HttpPost httppost = new HttpPost(url);
        httppost.addHeader("TOKEN", BaseApplication.getInstance().mUtil.getToken());
        int responsecode;
        String Response = null;
        try {

            MultipartEntity entity = new MultipartEntity(
                    HttpMultipartMode.BROWSER_COMPATIBLE);

            entity.addPart("pic", new FileBody(new File(imagepath)));
            Log.d(TAG, "entity======" + entity.toString());
            httppost.setEntity(entity);
            HttpResponse response = httpclient.execute(httppost);
            responsecode = response.getStatusLine().getStatusCode();
            if (responsecode == 200) {
                HttpEntity resEntity = response.getEntity();
                Response = EntityUtils.toString(resEntity);
            }
        } catch (Exception e) {
            System.out.println("上传出错啦!");
            mHandler.sendEmptyMessage(0);
            e.printStackTrace();
        }
        if (Response != null) {
            Log.d(TAG, "end=========" + (uploadIndex + 1) + "张图");
            Log.d(TAG, "图片上传成功后结果===========" + (uploadIndex + 1) + "   " + Response);
            // 构造gson, 把服务器端传过来的 json 字符串转化为 java 对象
            result = gson.fromJson(Response, CommResult.class);
            mHandler.sendEmptyMessage(1);

        } else {
            mHandler.sendEmptyMessage(0);
        }
        return result;
    }
3.以上就是完成图片的上传,但是有的时候需要连续上传 一张然后上传第二张

我用的是thread开启线程 上传之后使用handler进行处理 然后开启第二个线程thread2  奇怪的是thread1 不可以被重复使用 就被报之前的线程在进行 这个不能start  所有只好复制第二个thread2 ,并且这样传到服务器端的照片 是会重复 起先认为我是线程之间的开启有问题 图片的路径传递错误 各种打印均没有问题  只好在第二个线程开启的时候 sleep 1秒

Thread thread2 = new Thread(new Runnable() {
        @Override
        public void run() {
            if (Looper.myLooper()==null)
            Looper.prepare();

            try {
                Thread.sleep(SLEEPTIME);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            postFile(list.get(uploadIndex).getImg(), urlupload);
//            uploadPic(list.get(uploadIndex).getImg());
            Looper.loop();
        }
    });
为什么要线程休眠1秒 我也不知道 大神指教

 

HttpClient 4.3.6 使用MultipartEntityBuilder实现类似form表单提交方式的文件上传

最近在做 Android 端文件上传,要求采用 form 表单的方式提交,项目使用的 afinal 框架有文件上传功能,但是始终无法与php写的服务端对接上,无法上传成功。读源码发现:afinal 使...

ASP.NET+ExtJs4.0+表单提交submit,上传图片到服务器

function login_click(b) { //1.拿到表单面板 var loginFormPanel=Ext.getCmp("loginF...

使用MultipartEntity上传图片文件

自己写一个MultipartEntity:public class MultipartEntity {private final static char[]

android利用 MultipartEntity同时上传图片,文件和内容小结

最近在做一个需求的时候,需要要求同时在HTTP请求的时候,发送图片和文件,还有文本内容。上网搜索了一下,找到一个利用MultipartEntity实现的方式。 一.主要方法: 1. 利用Multi...

Android模拟表单提交文字和图片(HttpClient AND HttpURLConnection)

在HttpClient还没有被废弃之前了,感觉模拟表单提交还是比较简单的,因为有MultipartEntityBuilder的支持。看下面代码:private String uploadFile(S...

Android_HttpClient_get请求post表单提交上传

HttpClient 支持多种访问网络的方式,主要介绍get基本请求 post表单的提交,以及文件的长传操作!...

httpclient使用post提交json参数,(跟使用表单提交区分)

private void httpReqUrl(List list, String url) throws ClientProtocolException, IOException { l...
  • e_wsq
  • e_wsq
  • 2014年10月29日 02:58
  • 1837

使用FormData对象提交表单及上传图片

转自:http://blog.csdn.net/fdipzone/article/details/38910553 FormData 对象,可以把form中所有表单元素的name与v...

使用FormData对象提交表单及上传图片

FormData 对象,可以把form中所有表单元素的name与value组成一个queryString,提交到后台。在使用Ajax提交时,使用FormData对象可以减少拼接queryString的...
  • zyu67
  • zyu67
  • 2015年01月04日 15:12
  • 852
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用HttpClient MultipartEntity 上传图片 类似于表单提交
举报原因:
原因补充:

(最多只允许输入30个字)