Android 使用MultipartEntity 图文上传相关处理

使用 HttpClient上传图片、文字到服务器

1.需要在build.gradle中android下添加 useLibrary'org.apache.http.legacy'

android {

useLibrary'org.apache.http.legacy'

}

添加HttpClient库

2(.导入httpmime-4.1.1.jar )


3.......

public class UploadTask extends AsyncTask<String, Integer, String> {
        private Activity mContext;
        public UploadTask(Activity context) {
            this.mContext = context;
        }
        @Override
        protected String doInBackground(String... urls) {
            for (String url : urls) {
                uploadFile(url);
            }
            return null;
        }
        protected void onPostExecute(String result) {

        }
        protected void onProgressUpdate(Integer... progress) {

        }

        // upload photos
        public void uploadFile(String uploadFile) {
            try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(API_BASE_URL+"***");//上传地址
                MultipartEntity mpEntity = new MultipartEntity();
                File file = new File(uploadFile);
                ContentBody cbFile = new FileBody(file);
                mpEntity.addPart("imgFile", cbFile);// 图片
                mpEntity.addPart("参数1", new StringBody(参数1));//文字参数1
                mpEntity.addPart("参数2", new StringBody(参数2, Charset.forName("utf-8")));//文件参数2
                mpEntity.addPart("参数3", new StringBody(参数3, Charset.forName("utf-8")));
                httppost.setEntity(mpEntity);
                HttpResponse response = httpclient.execute(httppost);
                int statusCode=response.getStatusLine().getStatusCode();
                if(200 == statusCode){
//                    String result = EntityUtils.toString(response.getEntity());
                    StringBuilder builder = new StringBuilder();
                    BufferedReader bufferedReader = null;
                    try
                    {
                        bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        for (String s = bufferedReader.readLine(); s != null; s = bufferedReader.readLine())
                        {
                            builder.append(s);
                        }
//                        Log.e(TAG, "newPost"+"builder.toString()=" + builder.toString());//Result
                        Gson gson = new Gson();
                        //不能直接进行转换要借助typetoken不然会报android.view.ViewRootImpl$CalledFromWrongThreadException....
                        Type type = new TypeToken<HttpResult<UserBean>>(){}.getType();
                        HttpResult<UserBean> userBean = gson.fromJson(builder.toString(),type);
                        LogUtil.d("newPost","userBean----->"+userBean.toString());
                        //这里是工作线程不能直接进行UI操作,用handler发个消息给主线程进行操作;
                        Message msg = new Message();
                        msg.what = UPDATE_UI ;
                        msg.obj = userBean;
                        handler.sendMessage(msg);

                    }
                    catch (IOException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }else{
                    LogUtil.d("newPost","boom--error--->");
                    Message msg = new Message();
                    msg.what = ERROR ;
                    handler.sendMessage(msg);
                }
                httpclient.getConnectionManager().shutdown();
            }catch(Exception e){
                Message msg = new Message();
                msg.what = ERROR ;
                handler.sendMessage(msg);
                e.printStackTrace();
            }
        }
    }

在启动上传任务的地方执行:

UploadTask ut = new UploadTask(Activity.this);
ut.execute(picturePath); //urls为本地图片路径数组





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值