欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于文件上傳MultipartBody的使用方法

 更新時間:2022年06月09日 09:06:40   作者:Arcturis  
這篇文章主要介紹了關(guān)于文件上傳MultipartBody的使用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

文件上傳MultipartBody的使用

最近有使用一個文件上傳的功能,需要在請求中添加文件,一起傳給服務(wù)器

Okhttp提供了這個文件添加然后上傳的功能

下面給出核心的代碼,然后分析一下

//多個文件上傳,Filelist
    private static Request getFilesRequest(String url, List<File> files, Map<String, String> maps){
        MultipartBody.Builder builder=  new MultipartBody.Builder().setType(MultipartBody.FORM);
        if(maps==null){
            for(int i = 0;i < files.size();i++){
                builder.addPart( Headers.of("Content-Disposition", "form-data; name=\"file\";filename=\"file.jpg\""),
                        RequestBody.create(MediaType.parse("image/png"),files.get(i))
                ).build();
            }
        }else{
            for (String key : maps.keySet()) {
                String str = maps.get(key);
                builder.addFormDataPart(key,str );
            }
            for(int j = 0;j < files.size();j++){
                long fileSize = files.get(j).length();
                builder.addPart( Headers.of("Content-Disposition", "form-data; name=\"file\";filename=\"file.jpg\";filesize="+fileSize),
                        RequestBody.create(MediaType.parse("image/png"),files.get(j))
                );
            }
        }
        RequestBody body=builder.build();
        return   new Request.Builder().url(url).post(body).build();
    }

先說三個參數(shù)吧

  • 三個參數(shù)第一個是請求的URL
  • 第二個是Multipart的文件list
  • 第三個是headermap,就是請求的請求頭params

首先通過Multipart的Builder模式實例化一個builder

其次如果Header的map為空則直接將file加入到part中

否則依次將headermap 和 file的list中的數(shù)據(jù)加入到Request中

完成后builder build 出來的MultipartBody 請求賦值給 RequestBody(Multipartbody繼承了Requestbody)

之后將Request構(gòu)建完成即可

Call call =mOkhttpClient.newCall(request);

然后就是用Okhttp 進(jìn)行請求,請求方法略過

MultipartBody取出key,value數(shù)據(jù),打印參數(shù)

MultipartBody打印參數(shù)比較麻煩

kotlin:

 if (requestBody is MultipartBody) {
            val params = mutableMapOf<String, String>()
            val files = mutableMapOf<String, String>()
            requestBody.parts().forEach {
                val body = it.body()
                it.headers()?.let {
                    val header = it.value(0)
                    val split = header.replace(" ", "").replace("\"", "").split(";")
                    when (split.size) {
                        2 -> {
                            //文本參數(shù)
                            val keys = split[1].split("=")
                            if (keys.size > 1 && body.contentLength() < 1024) {
                                val key = keys[1]
                                val buffer = Buffer()
                                body.writeTo(buffer)
                                val value = buffer.readUtf8()
                                params[key] = value
                            }
                        }
                        3 -> {
                            //文件
                            val fileKeys = split[1].split("=")
                            val fileKey = if (fileKeys.size > 1) {
                                fileKeys[1]
                            } else ""
                            val nameValue = split[2].split("=")
                            val fileName = if (nameValue.size > 1) nameValue[1] else ""
                            files[fileKey] = fileName
                        }
                    }
                }
            }
            println("文件-->$files")
            println("文本-->$params")
        }

java寫法 

 
        if (requestBody instanceof MultipartBody) {
            MultipartBody body = (MultipartBody) requestBody;
            Map<String, String> params = new HashMap<>();
            Map<String, String> files = new HashMap<>();
            for (MultipartBody.Part part : body.parts()) {
                RequestBody body1 = part.body();
                Headers headers = part.headers();
                if (headers != null && headers.size() > 0) {
                    String[] split = headers.value(0).replace(" ", "").replace("\"", "").split(";");
                    if (split.length == 2) {
                        //文本
                        String[] keys = split[1].split("=");
                        if (keys.length > 1 && body1.contentLength() < 1024) {
                            String key = keys[1];
                            String value = "";
                            Buffer buffer = new Buffer();
                            body.writeTo(buffer);
                            value = buffer.readUtf8();
                            params.put(key, value);
                        }
                    } else if (split.length == 3) {
                        //文件
                        String fileKey = "";
                        String fileName = "";
                        String[] keys = split[1].split("=");
                        String[] names = split[2].split("=");
                        if (keys.length > 1) fileKey = keys[1];
                        if (names.length > 1) fileName = names[1];
                        files.put(fileKey, fileName);
                    }
                }
 
            }
            System.out.println("文本參數(shù)-->" + params);
            System.out.println("文件參數(shù)-->" + files);
        }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Spring SpringMVC,Spring整合MyBatis 事務(wù)配置的詳細(xì)流程

    Spring SpringMVC,Spring整合MyBatis 事務(wù)配置的詳細(xì)流程

    這篇文章給大家介紹SSM整合詳細(xì)流程步驟 Spring SpringMVC,Spring整合MyBatis 事務(wù)配置,本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-10-10
  • 用Java程序判斷是否是閏年的簡單實例

    用Java程序判斷是否是閏年的簡單實例

    下面小編就為大家?guī)硪黄肑ava程序判斷是否是閏年的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • java高并發(fā)鎖的3種實現(xiàn)示例代碼

    java高并發(fā)鎖的3種實現(xiàn)示例代碼

    本篇文章主要介紹了java高并發(fā)鎖的3種實現(xiàn)示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java項目開啟遠(yuǎn)程調(diào)試的方法步驟(tomcat、springboot)

    Java項目開啟遠(yuǎn)程調(diào)試的方法步驟(tomcat、springboot)

    這篇文章主要介紹了Java項目開啟遠(yuǎn)程調(diào)試的方法步驟(tomcat、springboot),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Spring中實例化bean的四種方式詳解

    Spring中實例化bean的四種方式詳解

    這篇文章主要給大家介紹了關(guān)于Spring中實例化bean的四種方式,分別是setter 方法、構(gòu)造函數(shù)、靜態(tài)工廠以及實例工廠等四種方法,分別給出了示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Java實現(xiàn)文本編譯器

    Java實現(xiàn)文本編譯器

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)文本編譯器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • springboot+thymeleaf 文件上傳功能的實現(xiàn)代碼

    springboot+thymeleaf 文件上傳功能的實現(xiàn)代碼

    這篇文章主要介紹了springboot+thymeleaf 文件上傳功能的實現(xiàn)代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot中YAML配置文件實例詳解

    SpringBoot中YAML配置文件實例詳解

    前面一直在使用properties配置文件,spring boot也支持yaml配置文件,下面這篇文章主要給大家介紹了關(guān)于SpringBoot中YAML配置文件的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • MyBatis的注解使用、ORM層優(yōu)化方式(懶加載和緩存)

    MyBatis的注解使用、ORM層優(yōu)化方式(懶加載和緩存)

    這篇文章主要介紹了MyBatis的注解使用、ORM層優(yōu)化方式(懶加載和緩存),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java引用傳遞實現(xiàn)方式以及與值傳遞的區(qū)別

    Java引用傳遞實現(xiàn)方式以及與值傳遞的區(qū)別

    這篇文章主要給大家介紹了關(guān)于Java引用傳遞實現(xiàn)方式以及與值傳遞的區(qū)別的相關(guān)資料,引用傳遞指在調(diào)用函數(shù)時將實際參數(shù)的地址直接傳遞到函數(shù)中,那么在函數(shù)中對參數(shù)所進(jìn)行的修改,將影響到實際參數(shù),需要的朋友可以參考下
    2023-09-09

最新評論