最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Okhttp實(shí)現(xiàn)上傳文件+參數(shù)請(qǐng)求接口form-data

 更新時(shí)間:2024年10月23日 14:38:35   作者:JMzz  
在進(jìn)行接口對(duì)接時(shí),常遇到需要傳遞多種類(lèi)型參數(shù)及文件上傳的情況,解決此問(wèn)題的關(guān)鍵在于參數(shù)傳遞和文件上傳的正確處理,在Service層和Controller層的傳參,可以通過(guò)@RequestParam標(biāo)注或直接使用請(qǐng)求實(shí)體類(lèi),但若結(jié)合文件上傳,則不應(yīng)使用@RequestBody注解

Okhttp實(shí)現(xiàn)上傳文件+參數(shù)請(qǐng)求接口form-data

有時(shí)候需要對(duì)接一些接口,而且接口傳參不僅需要各種類(lèi)型的參數(shù),甚至還要上傳文件,所以遇到挺多坑,用postman的生成代碼也不好用,于是就有了這篇文章。

話(huà)不多說(shuō),我們直接上代碼

首先是service層

    /**
     * 寫(xiě)注釋是個(gè)好習(xí)慣
     *
     * @param mFile
     * @param accountIndex
     * @param exportType
     * @param clear
     * @param email
     * @param dimensions
     * @return
     * @throws IOException
     */
    public String upload(MultipartFile mFile, Integer accountIndex, String exportType,
                         Boolean clear, String email, String dimensions) throws IOException {
        // 這里是MultipartFile轉(zhuǎn)File的過(guò)程
        File file = new File(Objects.requireNonNull(mFile.getOriginalFilename()));
        FileUtils.copyInputStreamToFile(mFile.getInputStream(), file);
        // url接口路徑
        String url = "http://localhost:8080/upload";
        // file是要上傳的文件 File()  這邊我上傳的是excel,其他類(lèi)型可以自己改這個(gè)parse
        RequestBody fileBody = RequestBody.create(MediaType.parse("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"), file);//這邊是把file寫(xiě)進(jìn)來(lái),也有寫(xiě)路徑的,但我這邊是寫(xiě)file文件,parse不行的話(huà)可以直接改這個(gè)"multipart/form-data"
        // 創(chuàng)建OkHttpClient實(shí)例,設(shè)置超時(shí)時(shí)間
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(60L, TimeUnit.SECONDS)
                .writeTimeout(60L, TimeUnit.SECONDS)
                .readTimeout(60L, TimeUnit.SECONDS)
                .build();
        // 不僅可以支持傳文件,還可以在傳文件的同時(shí),傳參數(shù)
        MultipartBody requestBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM) // 設(shè)置傳參為form-data格式
                .addFormDataPart("account_index", String.valueOf(accountIndex))
                .addFormDataPart("export_type", exportType)
                .addFormDataPart("clear", String.valueOf(clear))
                .addFormDataPart("email", email)
                .addFormDataPart("dimensions", dimensions)
                .addFormDataPart("file", file.getName(), fileBody) // 中間參數(shù)為文件名
                .build();

        // 構(gòu)建request請(qǐng)求體,有需要傳請(qǐng)求頭自己加
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        Response response = null;
        String result = "";
        try {
            // 發(fā)送請(qǐng)求
            response = okHttpClient.newCall(request).execute();
            result = response.body().string();
            log.info(url + "發(fā)送請(qǐng)求結(jié)果:" + result);
            if (!response.isSuccessful()) {
                log.info("請(qǐng)求失敗");
                return "請(qǐng)求失敗";
            }
            response.body().close();
        } catch (IOException e) {
            log.error(e.getMessage());
        }
        // 會(huì)在本地產(chǎn)生臨時(shí)文件,用完后需要?jiǎng)h除
        if (file.exists()) {
            file.delete();
        }
        return result;
    }

然后controller層的傳參需要用@RequestParam或者直接一個(gè)請(qǐng)求的實(shí)體類(lèi)

如果使用實(shí)體類(lèi),千萬(wàn)不要加@RequestBody,不然結(jié)合上傳文件會(huì)失效,上傳文件使用

@RequestPart("file") MultipartFile file進(jìn)行傳參

(@RequestPart("file") MultipartFile file,
@RequestParam("accountIndex") Integer accountIndex,
@RequestParam("exportType") String exportType,
@RequestParam(value = "clear", required = false) Boolean clear,
@RequestParam("email") String email,
@RequestParam(value = "dimensions", required = false) String dimensions)

示例如上,或者

(@RequestPart("file") MultipartFile file, RequestVo req)

請(qǐng)求成功,問(wèn)題解決。

總結(jié)

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

相關(guān)文章

  • JAVA基于Slack實(shí)現(xiàn)異常日志報(bào)警詳解

    JAVA基于Slack實(shí)現(xiàn)異常日志報(bào)警詳解

    這篇文章主要為大家介紹了JAVA基于Slack實(shí)現(xiàn)異常日志報(bào)警詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 基于IDEA創(chuàng)建SpringMVC項(xiàng)目流程圖解

    基于IDEA創(chuàng)建SpringMVC項(xiàng)目流程圖解

    這篇文章主要介紹了基于IDEA創(chuàng)建SpringMVC項(xiàng)目流程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • SpringCloud之@FeignClient()注解的使用方式

    SpringCloud之@FeignClient()注解的使用方式

    這篇文章主要介紹了SpringCloud之@FeignClient()注解的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JAVA中wait()和notify()如何使用詳解

    JAVA中wait()和notify()如何使用詳解

    這篇文章主要介紹了JAVA中wait()和notify()如何使用的相關(guān)資料,wait和notify必須在同步方法或同步塊中使用,并且調(diào)用對(duì)象必須一致,wait和sleep都可被interrupt喚醒,但wait會(huì)釋放鎖,而sleep不會(huì),需要的朋友可以參考下
    2025-05-05
  • SpringSecurity request過(guò)濾問(wèn)題示例小結(jié)

    SpringSecurity request過(guò)濾問(wèn)題示例小結(jié)

    這篇文章主要介紹了SpringSecurity request過(guò)濾問(wèn)題示例小結(jié),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-02-02
  • Java之SM4加密解密的實(shí)現(xiàn)

    Java之SM4加密解密的實(shí)現(xiàn)

    這篇文章主要介紹了Java之SM4加密解密的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Spring Cloud中配置客戶(hù)端示例詳解

    Spring Cloud中配置客戶(hù)端示例詳解

    這篇文章主要介紹了Spring Cloud中配置客戶(hù)端的相關(guān)知識(shí),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Java創(chuàng)建Excel數(shù)據(jù)透視表(Pivot?Table)的完整實(shí)戰(zhàn)教程

    Java創(chuàng)建Excel數(shù)據(jù)透視表(Pivot?Table)的完整實(shí)戰(zhàn)教程

    在日常的數(shù)據(jù)分析開(kāi)發(fā)中,我們經(jīng)常需要對(duì)大量原始數(shù)據(jù)進(jìn)行匯總、分類(lèi)和統(tǒng)計(jì),本文將介紹如何在?Java?中創(chuàng)建?Excel?數(shù)據(jù)透視表,并給出一個(gè)實(shí)用示例,有需要的小伙伴可以了解下
    2026-03-03
  • Java中RedissonClient基本使用指南

    Java中RedissonClient基本使用指南

    RedissonClient 是一個(gè)強(qiáng)大的 Redis 客戶(hù)端,提供了豐富的功能和簡(jiǎn)單的 API,本文就來(lái)介紹一下Java中RedissonClient基本使用指南,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 測(cè)量Java對(duì)象所占內(nèi)存大小方式

    測(cè)量Java對(duì)象所占內(nèi)存大小方式

    這篇文章主要介紹了測(cè)量Java對(duì)象所占內(nèi)存大小方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論

宝坻区| 抚宁县| 宁明县| 文山县| 小金县| 西乌| 凤翔县| 金沙县| 柳江县| 新郑市| 抚远县| 孝感市| 苏尼特左旗| 长治市| 雅安市| 庆城县| 梓潼县| 卢湾区| 潍坊市| 华蓥市| 阜新市| 德格县| 册亨县| 新龙县| 永川市| 车致| 禹城市| 于田县| 定远县| 安陆市| 达州市| 桃江县| 华坪县| 自治县| 咸宁市| 莱阳市| 灌云县| 武清区| 九龙县| 横峰县| 梁山县|