全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android中Okhttp3实现上传多张图片同时传递参数

之前上传图片都是直接将图片转化为io流传给服务器,没有用框架传图片。

最近做项目,打算换个方法上传图片。

Android发展到现在,Okhttp显得越来越重要,所以,这次我选择用Okhttp上传图片。

Okhttp目前已经更新到Okhttp3版本了,用法跟之前相比,也有一些差别。在网上找了很多资料,

并和java后台同事反复调试,终于成功上传多张图片,同时传递一些键值对参数。

以下是我对该过程的封装:

private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");

/**
   * 上传多张图片及参数
   * @param reqUrl URL地址
   * @param params 参数
   * @param pic_key 上传图片的关键字
   * @param paths 图片路径
   */
  public Observable<String> sendMultipart(String reqUrl,Map<String, String> params,String pic_key, List<File> files){
    return Observable.create(new Observable.OnSubscribe<String>(){

      @Override
      public void call(Subscriber<? super String> subscriber) {
        MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder();
        multipartBodyBuilder.setType(MultipartBody.FORM);
        //遍历map中所有参数到builder
        if (params != null){
          for (String key : params.keySet()) {
            multipartBodyBuilder.addFormDataPart(key, params.get(key));
          }
        }
        //遍历paths中所有图片绝对路径到builder,并约定key如“upload”作为后台接受多张图片的key
        if (files != null){
          for (File file : files) {
            multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file));
          }
        }
        //构建请求体
        RequestBody requestBody = multipartBodyBuilder.build();

        Request.Builder RequestBuilder = new Request.Builder();
        RequestBuilder.url(reqUrl);// 添加URL地址
        RequestBuilder.post(requestBody);
        Request request = RequestBuilder.build();
        mOkHttpClient.newCall(request).enqueue(new Callback() {
          @Override
          public void onFailure(Call call, IOException e) {
            subscriber.onError(e);
            subscriber.onCompleted();
            call.cancel();
          }

          @Override
          public void onResponse(Call call, Response response) throws IOException {
            String str = response.body().string();
            subscriber.onNext(str);
            subscriber.onCompleted();
            call.cancel();
          }
        });
      }
    });
  } 

在UI界面的调用:

OkHttp3Utils.getInstance().sendMultipart(Constants.URL.URL_ADD_NOTICE, mMap, "appendix", mImageList)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(Schedulers.newThread())
        .subscribe(new Subscriber<String>() {
          @Override
          public void onCompleted() {

          }

          @Override
          public void onError(Throwable throwable) {
            LogUtil.i(TAG, "throwable:" + throwable.toString());
          }

          @Override
          public void onNext(String s) {
            
            LogUtil.i(TAG, "s:" + s);
          }
        }); 

调试过程中,有一次将 multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file));写成了 multipartBodyBuilder.addFormDataPart(pic_key, null, RequestBody.create(MEDIA_TYPE_PNG, file));导致后台无法用常规方法获取图片(虽然断点调试时也能看到图片数据),这点需要注意。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# okhttp上传图片带参数  # okhttp上传文件带参数  # okhttp上传图片和参数  # Android使用 Retrofit 2.X 上传多文件和多表单示例  # 基于标准http实现Android多文件上传  # Android Retrofit实现多图片/文件、图文上传功能  # Android 使用 okhttp3和retrofit2 进行单文件和  # 上传图片  # 多张  # 遍历  # 都是  # 上传  # 也有  # 也能  # 有一次  # 找了  # 发展到  # 换个  # 转化为  # 需要注意  # 大家多多  # 键值  # 过程中  # 新到  # 写成了  # 在网上  # 我对该 


相关文章: C#如何使用XPathNavigator高效查询XML  C++中引用和指针有什么区别?(代码说明)  定制建站流程步骤详解:一站式方案设计与开发指南  如何在IIS7上新建站点并设置安全权限?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  ,柠檬视频怎样兑换vip?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  建站之星微信建站一键生成小程序+多端营销系统  如何在Windows 2008云服务器安全搭建网站?  家庭建站与云服务器建站,如何选择更优?  如何通过宝塔面板实现本地网站访问?  如何选择香港主机高效搭建外贸独立站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  建站之星如何助力企业快速打造五合一网站?  广德云建站网站建设方案与建站流程优化指南  免费网站制作appp,免费制作app哪个平台好?  seo网站制作优化,网站SEO优化步骤有哪些?  高防服务器租用指南:配置选择与快速部署攻略  网站制作需要会哪些技术,建立一个网站要花费多少?  北京制作网站的公司,北京铁路集团官方网站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  制作企业网站建设方案,怎样建设一个公司网站?  建站之星如何助力网站排名飙升?揭秘高效技巧  网站制作费用多少钱,一个网站的运营,需要哪些费用?  如何设置并定期更换建站之星安全管理员密码?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  建站之星CMS五站合一模板配置与SEO优化指南  独立制作一个网站多少钱,建立网站需要花多少钱?  如何访问已购建站主机并解决登录问题?  网站制作公司,橙子建站是合法的吗?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  建站VPS推荐:2025年高性能服务器配置指南  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Swift中switch语句区间和元组模式匹配  代购小票制作网站有哪些,购物小票的简要说明?  如何在云主机上快速搭建网站?  公司门户网站制作流程,华为官网怎么做?  如何选择高效稳定的ISP建站解决方案?  实现虚拟支付需哪些建站技术支撑?  制作网站的公司有哪些,做一个公司网站要多少钱?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何配置FTP站点权限与安全设置?  香港服务器部署网站为何提示未备案?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  开心动漫网站制作软件下载,十分开心动画为何停播?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  如何用腾讯建站主机快速创建免费网站?  如何在搬瓦工VPS快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。