`

使用Retrofit2.0+spingmvc上传图片和参数

 
阅读更多
如题,使用SPINGMVC接收数据

服务端接口如下
    @RequestMapping(value ="/photo", method = RequestMethod.POST)
    @ApiOperation(value = "XXX", notes = "XXX")
    public ResponseBean photo(@ApiParam(required = true, name = "param1", value = "XXX")@RequestParam String param1,
                              @ApiParam(required = true, name = "param2", value = "XXX")@RequestParam Long param2,
                              @ApiParam(required = true, name = "param3", value = "XXX")@RequestParam String param3,
                              @ApiParam(required = true, name = "param4", value = "XXX")@RequestParam int param4,
                              HttpServletRequest request){


处理图片的流程如下,在使用如下的方法是容易导致绑定解析错误
//MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request)


修改成如下:
public static List<FileInfo> multipartUpload(HttpServletRequest request) throws Exception {
        List<FileInfo> list = new ArrayList();
        MultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        //判断 request 是否有文件上传,即多部分请求
        if(multipartResolver.isMultipart(request)) {
            //转换成多部分request
            //MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);<==caused error
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)(request);
            List<MultipartFile> multipartFileList =  multiRequest.getFiles("file");
            if (multipartFileList.size()==0){//ios版本
                //取得request中的所有文件名
                Iterator<String> iter = multiRequest.getFileNames();
                while (iter.hasNext()) {
                    //取得上传文件
                    MultipartFile file = multiRequest.getFile(iter.next());
                    list.add(FastDFS(file));//上传头像
                }
            }else{//android版本
                for (MultipartFile file :multipartFileList){
                    list.add(FastDFS(file));//上传头像
                }
            }
        }
        return list;
    }


安卓端处理如下:最开始是打算1-1处理,最终还是整体作为RequestBody来处理,这样服务端接的时候,数据就会在multiRequest;
        RequestBody requestBody = new MultipartBody.Builder()
                .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/*"), file))
                .addFormDataPart("param1", param1)
                .addFormDataPart("param2", param2)
                .addFormDataPart("param3, param3)
                .addFormDataPart("param4", param4+"").build();

        Observable observable = connectionService.photo(requestBody).map(new HttpResultFunc<Long>());


/***********使用OHTTP3**************/
 RequestBody filePartBody = new MultipartBody.Builder()
                            .addFormDataPart("file", pressedPhotoFile.getName(), RequestBody.create(MediaType.parse("image/*"), pressedPhotoFile))
                            .addFormDataPart("param1", param1)
                            .addFormDataPart("param2", param2)
                            .addFormDataPart("param3", param3)
                            .addFormDataPart("param4", param4).build();

                    Request request = new Request.Builder()
                            .url(ConstantNewValue.PHOTO_INTERFACE)
                            .post(filePartBody)
                            .build();

                    OkHttpClient.Builder builder = new OkHttpClient.Builder();
                    OkHttpClient okHttpClient = builder
                            .connectTimeout(200, TimeUnit.SECONDS)
                            .addInterceptor(new ReadCookieInterceptor())
                            .build();

                    response = okHttpClient.newCall(request).execute();
                    String mResult = response.body().string();

分享到:
评论

相关推荐

    Android中RxJava+Retrofit2.0+MVP模式的整合

    在Android应用开发中,使用RxJava、Retrofit2.0和MVP(Model-View-Presenter)模式的组合,可以构建出高效、可维护且易于测试的代码结构。以下是关于这三个技术及其整合的关键知识点: **RxJava** RxJava是Reactive...

    retrofit2.0+mvp 登录 demo

    本篇将深入探讨基于`Retrofit2.0`和`MVP`架构的登录Demo,旨在为初学者提供一个清晰的理解和实践指南。`Retrofit`是一款优秀的网络请求库,它使得Android开发者能够方便地进行网络交互,而`MVP`(Model-View-...

    MVP+Dagger.Android+LiveData+RxJava2.0+Retrofit2.0+OkHttp

    本项目采用了MVP(Model-View-Presenter)设计模式,结合Dagger.Android进行依赖注入,利用LiveData进行数据观察,以及RxJava2.0和Retrofit2.0+OkHttp进行网络请求处理,构建了一个强大的框架体系。 首先,MVP...

    RxJava整合Retrofit2.0网络框架

    在Android开发中,Retrofit和RxJava是两个非常流行的库,它们分别负责网络请求和异步数据处理。本文将深入探讨如何将RxJava与Retrofit2.0整合,以实现高效、灵活的网络请求,特别是在处理城市天气查询这类实时性较强...

    RxJava + retrofit2.0 +okhttp + json+ greendao+ androidstudio

    在Android开发中,构建高效的网络访问架构至关重要,而"RxJava + Retrofit2.0 + OkHttp + JSON + GreenDao + Android Studio"的组合提供了一种高效、简洁的解决方案。让我们详细了解一下这些技术栈的关键知识点。 *...

    android架构mvp + rxandroid + Retrofit2.0 + Fresco

    MVP模式保证了代码结构清晰,RxAndroid简化了异步操作,Retrofit2.0使网络请求变得简单,而Fresco则提供了优质的图片处理能力。通过"Retrofit2.0Demo"这个项目文件,开发者可以学习如何将这些组件集成到实际项目中,...

    Rxjava 2.0+Retrofit 2.0+Mvp架构研究

    在Android开发领域,RxJava 2.0、Retrofit 2.0 和 MVP(Model-View-Presenter)架构是常见的组合,它们各自扮演着重要的角色,以提高代码的可读性、可维护性和测试性。下面我们将深入探讨这三个技术及其在实际项目中...

    Retrofit2.0+OkHttp网络请求

    在Android开发中,Retrofit2.0和OkHttp是两个非常重要的网络库,它们结合使用可以构建出高效、简洁的网络请求解决方案。本教程将深入探讨Retrofit2.0和OkHttp在网络请求中的应用,以及如何在实际项目中实现一个简单...

    retrofit2.0+okhtt3.0+gson+Rxjava

    在Android开发中,Retrofit2.0、OkHttp3.0、Gson和RxJava是四个非常关键的库,它们组合在一起可以构建出强大的网络请求框架。以下将详细阐述这四个库的功能及其整合使用的方式。 **Retrofit2.0** 是Square公司推出...

    Kotlin-Android开发之开源《新闻APP》基于MVP模式+Retrofit2.0+RxJava1.0+Dagger2框架代码

    Android开发之MVP模式+Retrofit2.0+RxJava1.0+Dagger2框架封装》开发而成,实现了新闻的分类浏览、历史记录、我的收藏以及小视频的播放,新闻数据来源《聚合数据-开发者数据API开放平台》,大家注册个账号就可以免费...

    Retrofit2.0+RxJava+MVP+Bmob+XRecyclerView+Glide在android中的使用

    在Android开发中,Retrofit2.0、RxJava、MVP、Bmob、XRecyclerView以及Glide都是常用的技术框架和库,它们各自有着独特的功能,同时也常被组合使用以提高应用的性能和开发效率。 首先,Retrofit2.0是Square公司推出...

    mvp+rxjava2+retrofit2.0+realm基础代码

    在Android开发中,MVP(Model-View-Presenter)架构模式、RxJava 2.0、Retrofit 2.0 和 Realm 是四个重要的组件,它们分别处理应用的结构设计、异步编程、网络请求和本地数据存储。接下来,我们将详细讨论这些技术...

    Kotlin-Android开发之MVP模式+Retrofit2.0+RxJava1.0+Dagger2框架封装代码

    在Android应用开发中,组合使用Kotlin、MVP(Model-View-Presenter)设计模式、Retrofit2.0网络库、RxJava1.0响应式编程框架以及Dagger2依赖注入框架,是一种常见的高效开发方式。这篇内容将深入探讨这些技术在实际...

    实现retrofit2.0+rxjava2.0+封装过的mvp

    1.完成一个简单的mvp示例,/model包下的Model_1、/...5.以上步骤已经基本完成P层优化,在Activity每次都要去调用P层中View的绑定和分离,因此自然而然的使用BaseActivity抽象类来完成优化(这里也使用泛型来完成)

    Retrofit2.0 Demo

    在Android开发中,Retrofit2.0是一款非常流行的网络请求库,它由Square公司开发,设计简洁、易于使用,能够方便地将网络接口转换为Java接口。本项目"Retrofit2.0 Demo"是一个实际应用示例,结合了Okhttp作为网络底层...

    Retrofit2.0单文件多文件上传(客户+端服务端)

    本文将深入探讨如何使用Retrofit2.0实现单文件和多文件的上传,包括客户端(即Android应用)和服务器端的实现细节。 ### 1. Retrofit2.0简介 Retrofit是由Square公司开发的一款类型安全的HTTP客户端,它允许开发者...

    Retrofit2.0 实现图文(参数+图片)上传方法总结

    经过研究和实践,本文将总结 Retrofit2.0 实现图文(参数+图片)上传方法。 一、定义网络请求接口 在 Retrofit2.0 中,定义网络请求接口需要使用 @Multipart 注解,用于文件上传。下面是一个示例接口: ```java ...

    Android中MVP+Retrofit+Rxjava框架的demo

    在Android开发中,MVP(Model-View-Presenter)架构模式、Retrofit网络库和RxJava响应式编程库是常用的技术栈,它们可以协同工作,提高应用的可维护性和代码组织性。以下是对这些技术的详细说明: 1. MVP架构模式:...

    Android基于Retrofit2.0+RxJava 网络请求框架.zip

    针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也...

Global site tag (gtag.js) - Google Analytics