国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【使用multipart/form-data方式傳遞MultipartFile參數(shù),實(shí)現(xiàn)服務(wù)間文件的傳遞】

這篇具有很好參考價值的文章主要介紹了【使用multipart/form-data方式傳遞MultipartFile參數(shù),實(shí)現(xiàn)服務(wù)間文件的傳遞】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄
  • 一、代碼實(shí)現(xiàn)
  • 二、MultipartFile工具類
  • 三、HttpClient使用
  • 四、參考鏈接
一、代碼實(shí)現(xiàn)
1、A服務(wù)接收前端上傳文件并發(fā)送至B服務(wù)
引入依賴
<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.13</version>
        </dependency>
使用MultipartFile接收前端文件
  	@PostMapping("/import")
    @ApiOperation("文件上傳")
    public Object importExcel(@RequestParam("file") MultipartFile file) {
        // 后續(xù)文件處理邏輯......
    }
調(diào)取第三方接口,發(fā)送 MultipartFile 文件
/**
     * 以post方式調(diào)用第三方接口,以form-data 形式  發(fā)送 MultipartFile 文件數(shù)據(jù)
     *
     * @param url           post請求url
     * @param fileParamName 文件參數(shù)名稱
     * @param multipartFile 文件
     * @param paramMap      表單里其他參數(shù)
     * @return 響應(yīng)結(jié)果
     */
    public static Object doPostFormData(String url, String fileParamName, MultipartFile multipartFile, Map<String, String> paramMap) {
        // 創(chuàng)建Http實(shí)例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 創(chuàng)建HttpPost實(shí)例
        HttpPost httpPost = new HttpPost(url);
        // 請求參數(shù)配置
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000)
                .setConnectionRequestTimeout(10000).build();
        httpPost.setConfig(requestConfig);
        try {
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setCharset(StandardCharsets.UTF_8);
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

            String fileName = multipartFile.getOriginalFilename();
            // 文件流
            builder.addBinaryBody(fileParamName, multipartFile.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);
            //表單中其他參數(shù)
            for (Map.Entry<String, String> entry : paramMap.entrySet()) {
                builder.addPart(entry.getKey(), new StringBody(entry.getValue(), ContentType.create("text/plain", Consts.UTF_8)));
            }
            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            // 執(zhí)行提交
            HttpResponse response = httpClient.execute(httpPost);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                // 返回
                return EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("調(diào)用HttpPost失??!" + e.toString());
        } finally {
            if (httpClient != null) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    log.error("關(guān)閉HttpPost連接失?。?);
                }
            }
        }
        return null;
    }
2、B服務(wù)接收文件
    @PostMapping(value = "/import", headers = "content-type=multipart/form-data")
    @ApiOperation("接收上傳文件")
    public Result<Object> importExcel(HttpServletRequest request, HttpServletResponse response) {
        CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        commonsMultipartResolver.setDefaultEncoding("utf-8");
        if (commonsMultipartResolver.isMultipart(request)){
            MultipartHttpServletRequest mulReq = (MultipartHttpServletRequest) request;
            Map<String, MultipartFile> map = mulReq.getFileMap();
          	// fileParamName
            MultipartFile multiFile = map.get("fileParamName");
            // 后續(xù)文件處理邏輯......
        }
        return new Result<>().error("請求內(nèi)容有誤!");
    }
二、MultipartFile工具類
  • 簡介:MultipartFile是SpringMVC提供簡化上傳操作的工具類,在不使用框架之前,都是使用原生的HttpServletRequest來接收上傳的數(shù)據(jù),文件是以二進(jìn)制流傳遞到后端的,然后需要我們自己轉(zhuǎn)換為File類。使用了MultipartFile工具類之后,我們對文件上傳的操作就簡便許多了。
  • MultipartFile工具類的接口方法
package org.springframework.web.multipart;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import org.springframework.core.io.InputStreamSource;
import org.springframework.core.io.Resource;
import org.springframework.lang.Nullable;
import org.springframework.util.FileCopyUtils;

public interface MultipartFile extends InputStreamSource {
    //getName() 返回參數(shù)的名稱
    String getName();
    //獲取源文件的昵稱
    @Nullable
    String getOriginalFilename();
    //getContentType() 返回文件的內(nèi)容類型
    @Nullable
    String getContentType();
    //isEmpty() 判斷是否為空,或者上傳的文件是否有內(nèi)容
    boolean isEmpty();
    //getSize() 返回文件大小 以字節(jié)為單位
    long getSize();
    //getBytes() 將文件內(nèi)容轉(zhuǎn)化成一個byte[] 返回
    byte[] getBytes() throws IOException;
    //getInputStream() 返回InputStream讀取文件的內(nèi)容
    InputStream getInputStream() throws IOException;

    default Resource getResource() {
        return new MultipartFileResource(this);
    }
    //transferTo是復(fù)制file文件到指定位置(比如D盤下的某個位置),不然程序執(zhí)行完,文件就會消失,程序運(yùn)行時,臨時存儲在temp這個文件夾中
    void transferTo(File var1) throws IOException, IllegalStateException;

    default void transferTo(Path dest) throws IOException, IllegalStateException {
        FileCopyUtils.copy(this.getInputStream(), Files.newOutputStream(dest));
    }
}
  • InputStreamSource 這個接口本質(zhì)上返回的還是一個InputStream 流對象
package org.springframework.core.io;

import java.io.IOException;
import java.io.InputStream;

public interface InputStreamSource {
	//定位并打開資源,返回資源對應(yīng)的輸入流。
    //每次調(diào)用都會返回新的輸入流,調(diào)用者在使用完畢后必須關(guān)閉該資源。 
    InputStream getInputStream() throws IOException;
}
三、HttpClient使用
  • 使用httpclient,需要下載httpclient-4.5.jar、httpmime-4.5.jar兩個包,下載地址為:http://hc.apache.org/downloads.cgi 大致看了下源碼,其實(shí)也是使用字符拼接,只是封裝后使用起來更簡潔方便一些。、
  • httpclient需要注意的4點(diǎn):
  • 1.HttpClient4.3版本往后,原來的MultipartEntity過時不建議再使用了,替換成新的httpmime下面的MultipartEntityBuilder
  • 2.multipartEntity 最好設(shè)置contentType和boundary,不然會導(dǎo)致后面接收文件時的第一種方法接收不到文件報(bào)錯。
  • 3.使用addBinaryBody的坑:addBinaryBody 有6種不同用法,一般都是如下代碼所示上傳File即可,但是當(dāng)傳byte[]字節(jié)數(shù)組時,必須使用4參傳值,且第四參必須帶后綴名,例如:entityBuilder.addBinaryBody(“file”,new byte[]{},ContentType.DEFAULT_BINARY,“fileName.jpg”);否則會導(dǎo)致接收文件時getFileNames()為空。
  • 4.不使用addBinaryBody,也可以直接使用addPart,先把文件轉(zhuǎn)換成FileBody就可以了
  • contentType使用【multipart/form-data】:它會將表單的數(shù)據(jù)處理為一條消息,以標(biāo)簽為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳文件,
  • boundary:請求體中的boundary參數(shù)指定的就是分隔體,請求參數(shù)之間需要通過分隔體分隔,不然就會被識別成一個參數(shù)。
四、參考鏈接
  • https://blog.csdn.net/lexuansweet/article/details/122967948

文章來源地址http://www.zghlxwxcb.cn/news/detail-654525.html

到了這里,關(guān)于【使用multipart/form-data方式傳遞MultipartFile參數(shù),實(shí)現(xiàn)服務(wù)間文件的傳遞】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用postman發(fā)送請求,提示Content type ‘multipart/form-data not supported

    使用postman發(fā)送請求,提示Content type ‘multipart/form-data not supported

    1、原因:后端通過@RequestBody 的方式接收參數(shù),不能通過form-data方式傳參,每一個請求必須是通過實(shí)體對象進(jìn)行傳參,需要改為使用json傳參

    2024年01月22日
    瀏覽(20)
  • 理解 HTTP 中的 multipart/form-data

    HTTP 是一種基于請求-響應(yīng)模型的網(wǎng)絡(luò)通信協(xié)議,主要用于 Web 中客戶端和服務(wù)器之間通信的數(shù)據(jù)傳輸。事實(shí)上,如今的互聯(lián)網(wǎng)就是構(gòu)建在 HTTP 之上的?;谡埱?響應(yīng)模式的通信方式很簡單,客戶端向服務(wù)器發(fā)送請求,服務(wù)器處理請求并進(jìn)行響應(yīng)。 HTTP 其實(shí)并不關(guān)心我們想要傳

    2024年02月08日
    瀏覽(18)
  • postman上傳文件(multipart/form-data請求)

    postman上傳文件(multipart/form-data請求)

    網(wǎng)頁的form表單中,如果存在上傳文件的表單,則需要將form標(biāo)簽設(shè)置enctype=\\\"multipart/form-data\\\"屬性,意思是將Content-Type設(shè)置成multipart/form-data。 那么如何使用 postman發(fā)送 multipart/form-data請求呢? Content-Type: multipart/form-data; boundary= 表單中的 enctype 屬性規(guī)定在發(fā)送到服務(wù)器之前應(yīng)該如

    2024年02月02日
    瀏覽(32)
  • 使用postMan調(diào)試接口出現(xiàn) Content type ‘multipart/form-data;charset=UTF-8‘ not supported“

    使用postMan調(diào)試接口出現(xiàn) Content type ‘multipart/form-data;charset=UTF-8‘ not supported“

    最近好久沒寫springboot項(xiàng)目了,然后寫了一個添加用戶的接口,使用postman測試時出現(xiàn)了問題。如下圖: org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘multipart/form-data;boundary=--------------------------121447464228391674964565;charset=UTF-8’ not supported 原因是接口做了規(guī)范,默認(rèn)就是

    2024年02月04日
    瀏覽(26)
  • python + request實(shí)現(xiàn)multipart/form-data請求上傳文件

    1、multipart/form-data介紹 ????????multipart/form-data 是 HTTP 協(xié)議中用于上傳文件的一種類型。它允許客戶端向服務(wù)器發(fā)送文件以及一些額外的元數(shù)據(jù)(例如文件名、MIME 類型、圖片等)。這種類型的請求不同于普通的application/x-www-form-urlencoded 格式,其中數(shù)據(jù)是在請求體中進(jìn)行編

    2024年02月11日
    瀏覽(22)
  • 【已解決】使用Postman調(diào)試接口出現(xiàn) Content type ‘multipart/form-data;charset=UTF-8‘ not supported“

    【已解決】使用Postman調(diào)試接口出現(xiàn) Content type ‘multipart/form-data;charset=UTF-8‘ not supported“

    使用postman請求公司接口出現(xiàn)下面報(bào)錯 message:“Content type ‘multipart/form-data;boundary=--------------------------134853779743698278510986;charset=UTF-8’ not supported” 原因是我們的接口做了規(guī)范,默認(rèn)就是通過@RequestBody 的方式請求的;也就是每一個請求必須是通過實(shí)體對象進(jìn)行傳參,不能通過

    2024年02月10日
    瀏覽(23)
  • Content type ‘multipart/form-data;boundary=解決方案

    Content type ‘multipart/form-data;boundary=解決方案

    記錄一個小問題 今天在用postman調(diào)試接口,發(fā)送請求的時候沒進(jìn)入斷點(diǎn)就報(bào)錯\\\" Content type \\\'multipart/form-data;boundary=--------------------------xxxxxxxxxxxxx;\\\" 當(dāng)時我就納了悶了,東研究西研究的找了半天原因。 最后找了一個老師傅,一眼就看出來問題了。因?yàn)榻涌谑莿e人寫的,我屬于后面

    2024年02月15日
    瀏覽(18)
  • 上傳文件.HttpMediaTypeNotSupportedException:Content type ‘multipart/form-data;

    org.springframework.web.HttpMediaTypeNotSupportedException:Content type \\\'multipart/form-data;boundary=----WebKitFormBoundaryCkkfE9h3eXMf4Pw4;charset=UTF-8\\\' not supported controller方法入?yún)栴}所致 原本接口定義為 第二個參數(shù)有注解 @RequestBody,它是導(dǎo)致這個問題的關(guān)鍵!??! 解決:將@RequestBody去掉即可解決問題!再

    2024年02月14日
    瀏覽(88)
  • SpringBoot:使用application/octet-stream 流式上傳大文件,解決Mutipartfile multipart/form-data上傳產(chǎn)生臨時文件問題

    SpringBoot:使用application/octet-stream 流式上傳大文件,解決Mutipartfile multipart/form-data上傳產(chǎn)生臨時文件問題

    multipart的流不是HTTPRequest的流,而是服務(wù)器的臨時文件流 multipart/form-data是表單上傳,接口可以從Mutipartfile對象獲取輸入流getInputStream,表面上看沒產(chǎn)生臨時文件 org.springframework.web.multipart.support.StandardMultipartHttpServletRequest的getInputStream 這里面的流是從DiskFileItem(一眼磁盤)拿的

    2024年02月14日
    瀏覽(26)
  • 解鎖新技能《springboot基于表單multipart/form-data的文件上傳》

    springboot的文件上傳有多種實(shí)現(xiàn)方案,個人比較推薦方案三通過實(shí)體類屬性綁定的方式,這樣可以方便文件及其關(guān)聯(lián)的相關(guān)屬性字段; 開源依賴pom 一、單個文件上傳及其它屬性字段 二、通過數(shù)組方式上傳多個文件 三、通過實(shí)體類綁定方式上傳文件及傳遞其它屬性值 四、通過

    2024年02月13日
    瀏覽(87)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包