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

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

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

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

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

話不多說,我們直接上代碼

首先是service層

    /**
     * 寫注釋是個好習(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的過程
        File file = new File(Objects.requireNonNull(mFile.getOriginalFilename()));
        FileUtils.copyInputStreamToFile(mFile.getInputStream(), file);
        // url接口路徑
        String url = "http://localhost:8080/upload";
        // file是要上傳的文件 File()  這邊我上傳的是excel,其他類型可以自己改這個parse
        RequestBody fileBody = RequestBody.create(MediaType.parse("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"), file);//這邊是把file寫進來,也有寫路徑的,但我這邊是寫file文件,parse不行的話可以直接改這個"multipart/form-data"
        // 創(chuàng)建OkHttpClient實例,設(shè)置超時時間
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(60L, TimeUnit.SECONDS)
                .writeTimeout(60L, TimeUnit.SECONDS)
                .readTimeout(60L, TimeUnit.SECONDS)
                .build();
        // 不僅可以支持傳文件,還可以在傳文件的同時,傳參數(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請求體,有需要傳請求頭自己加
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        Response response = null;
        String result = "";
        try {
            // 發(fā)送請求
            response = okHttpClient.newCall(request).execute();
            result = response.body().string();
            log.info(url + "發(fā)送請求結(jié)果:" + result);
            if (!response.isSuccessful()) {
                log.info("請求失敗");
                return "請求失敗";
            }
            response.body().close();
        } catch (IOException e) {
            log.error(e.getMessage());
        }
        // 會在本地產(chǎn)生臨時文件,用完后需要刪除
        if (file.exists()) {
            file.delete();
        }
        return result;
    }

然后controller層的傳參需要用@RequestParam或者直接一個請求的實體類

如果使用實體類,千萬不要加@RequestBody,不然結(jié)合上傳文件會失效,上傳文件使用

@RequestPart("file") MultipartFile file進行傳參

(@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)

請求成功,問題解決。

總結(jié)

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

相關(guān)文章

  • 換了最新的idea如何將原來舊版本的idea設(shè)置導(dǎo)進新的idea中

    換了最新的idea如何將原來舊版本的idea設(shè)置導(dǎo)進新的idea中

    這篇文章主要介紹了換了最新的idea如何將原來舊版本的idea設(shè)置導(dǎo)進新的idea中,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java 回調(diào)函數(shù)深入理解

    Java 回調(diào)函數(shù)深入理解

    這篇文章主要介紹了 Java 回調(diào)函數(shù)深入理解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Shiro的運行大致流程詳解

    Shiro的運行大致流程詳解

    這篇文章主要介紹了Shiro的運行大致流程詳解,Shiro和SpringSecurity都是Java領(lǐng)域中常用的安全框架,它們都提供了身份認(rèn)證和授權(quán)功能,可以幫助開發(fā)者快速構(gòu)建安全的應(yīng)用程序,需要的朋友可以參考下
    2023-07-07
  • java實現(xiàn)查找PDF關(guān)鍵字所在頁碼及其坐標(biāo)

    java實現(xiàn)查找PDF關(guān)鍵字所在頁碼及其坐標(biāo)

    這篇文章主要介紹了java實現(xiàn)查找PDF關(guān)鍵字所在頁碼及其坐標(biāo)的方法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • springboot 如何重定向redirect 并隱藏參數(shù)

    springboot 如何重定向redirect 并隱藏參數(shù)

    這篇文章主要介紹了springboot 如何重定向redirect 并隱藏參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 使用Kubernetes和Docker部署Java微服務(wù)詳細(xì)代碼

    使用Kubernetes和Docker部署Java微服務(wù)詳細(xì)代碼

    Java微服務(wù)項目是一種基于Java技術(shù)棧的分布式系統(tǒng)開發(fā)方式,下面這篇文章主要給大家介紹了關(guān)于使用Kubernetes和Docker部署Java微服務(wù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • java獲取當(dāng)前時間戳的方法

    java獲取當(dāng)前時間戳的方法

    本文主要介紹了java獲取當(dāng)前時間戳的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • postman測試傳入List<String>參數(shù)方式

    postman測試傳入List<String>參數(shù)方式

    這篇文章主要介紹了postman測試傳入List<String>參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解hibernate4基本實現(xiàn)原理

    詳解hibernate4基本實現(xiàn)原理

    本文通過圖文并茂的形式給大家介紹的hibernate4基本實現(xiàn)原理,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • java遠(yuǎn)程連接調(diào)用Rabbitmq的實例代碼

    java遠(yuǎn)程連接調(diào)用Rabbitmq的實例代碼

    本篇文章主要介紹了java遠(yuǎn)程連接調(diào)用Rabbitmq的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論