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

關(guān)于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服務(wù)傳輸?shù)膯栴}

 更新時間:2021年01月21日 10:11:43   作者:強強強啊丶  
這篇文章主要介紹了關(guān)于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服務(wù)傳輸?shù)膯栴},本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

大家好,因為近期做需求中遇到了文件上傳這個東西,而且我這個還是跨服務(wù)去傳輸文件的所以我這邊使用了httpclient和RestTemplate去做,但是最后還是用的httpclient。feign和RestTemplate在超大文件下會OOM所以適用于小文件傳輸我這邊測試的在1G以下。httpclient好像是無限哈哈哈。(具體多少大家有時間可以去測一下)

1.被調(diào)用服務(wù)的Controller

1.這塊使用@RequestParam(“file”)或者@RequestPart(“file”)都是可以接到參數(shù)的。
2.(“file”)一定要和遠程調(diào)用代碼傳的參數(shù)名一樣 否則接不到參數(shù)。

 @RequestMapping(value = "/remoteCallUpload",method = RequestMethod.POST)
  @ApiOperation("測試遠程調(diào)用上傳")
  public String remoteCallUpload(@RequestParam("file") MultipartFile file){
    System.out.println(file);
    return "成功";
  }

1.RestTemplate

1.如果用RestTemplate的話首先需要把RestTemplate交給spring去管理所以先來一個配置類。
2.@SuppressWarnings(“all”) 這個注解是jdk自帶的的意思是 意志所有的警告。

@Configuration
@SuppressWarnings("all")
public class RestTemplateConfig {

  @Autowired
  RestTemplateBuilder builder;

  @Bean
  public RestTemplate restTemplate() {
    return builder.build();
  }
}

2.RestTemplate遠程調(diào)用文件傳輸

這里有幾個要注意的地方

1.必須重寫否則傳輸時報錯

ByteArrayResource byteArrayResource = new ByteArrayResource(file.getBytes()) {
      @Override
      public String getFilename() {
        return file.getOriginalFilename();
      }
    };

2.設(shè)置請求頭因為就在模擬前端發(fā)送上傳文件的請求所以請求頭必須是multipart/form-data

3.第三個參數(shù)是被調(diào)用Controller的返回值類型,我的測試Controller寫的是String所以我的這邊第三參數(shù)就是String.Class

restTemplate.postForObject(url, files, String.class);

4.url就是被調(diào)用服務(wù)的地址 如:

http://192.168.3.7:50003/test/remoteCallUpload

以上是注意事項。

@Autowired
private RestTemplate restTemplate;

private String gettestRestTemplate(MultipartFile file, String url) throws IOException {
    HttpHeaders headers = new HttpHeaders();
    MediaType type = MediaType.parseMediaType("multipart/form-data");
    headers.setContentType(type);
    MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
    ByteArrayResource byteArrayResource = new ByteArrayResource(file.getBytes()) {
      @Override
      public String getFilename() {
        return file.getOriginalFilename();
      }
    };
    form.add("file", byteArrayResource);
    form.add("filename", file.getOriginalFilename());
    //用HttpEntity封裝整個請求報文
    HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);

    String flag = restTemplate.postForObject(url, files, String.class);

    return flag;
  }

3.HttpClient

1.使用httpclient的話首先要引入pom文件坐標。

 <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.6</version>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpmime</artifactId>
      <version>4.5.6</version>
    </dependency>

3.HttpClient遠程調(diào)用文件傳輸

1.httpclient這段代碼有要用的小伙伴直接粘過去就能用
注意一下返回值自己改一下就行execute.getEntity()

@SneakyThrows
  private String gettesthttpclient(MultipartFile file, String url) {
    CloseableHttpClient httpclient = HttpClients.createDefault();
    RequestConfig requestConfig = RequestConfig.custom()
        .setConnectionRequestTimeout(10000)
        .setConnectTimeout(5000)
        .build();
    HttpPost httpPost = new HttpPost(url);
    MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
    // 解決中文文件名亂碼問題
    entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
    entityBuilder.setCharset(Consts.UTF_8);
    ContentType contentType = ContentType.create(ContentType.TEXT_PLAIN.getMimeType(), Consts.UTF_8);
    entityBuilder.addBinaryBody("file", file.getInputStream(), ContentType.DEFAULT_BINARY, file.getOriginalFilename());
    httpPost.setEntity(entityBuilder.build());
    httpPost.setConfig(requestConfig);
    HttpResponse execute = httpclient.execute(httpPost);
    String flag = EntityUtils.toString(execute.getEntity());
    return flag;
  }

總結(jié)

遠程調(diào)用使用了RestTemplate和httpclient也可以使用feign,但是RestTemplate和feign大文件會OOM,httpclient不會所以大家可以根據(jù)自己場景去選擇。

強強強

到此這篇關(guān)于關(guān)于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服務(wù)傳輸?shù)膯栴}的文章就介紹到這了,更多相關(guān)springboot MultipartFile文件跨服務(wù)傳輸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用FeignClient進行微服務(wù)交互方式(微服務(wù)接口互相調(diào)用)

    使用FeignClient進行微服務(wù)交互方式(微服務(wù)接口互相調(diào)用)

    這篇文章主要介紹了使用FeignClient進行微服務(wù)交互方式(微服務(wù)接口互相調(diào)用),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Kotlin與Java的主客觀對比分析

    Kotlin與Java的主客觀對比分析

    這篇文章主要介紹了Kotlin與Java的主客觀對比分析,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java如何在Map中存放重復(fù)key

    Java如何在Map中存放重復(fù)key

    這篇文章主要介紹了Java如何在Map中存放重復(fù)key,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Sprigmvc項目轉(zhuǎn)為springboot的方法

    Sprigmvc項目轉(zhuǎn)為springboot的方法

    本篇文章主要介紹了Sprigmvc項目轉(zhuǎn)為springboot的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java 中文字符按Unicode排序的實現(xiàn)方法

    Java 中文字符按Unicode排序的實現(xiàn)方法

    這篇文章主要介紹了Java 中文字符按Unicode排序的實現(xiàn)方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • SpringBoot自定義注解實現(xiàn)Token校驗的方法

    SpringBoot自定義注解實現(xiàn)Token校驗的方法

    這篇文章主要介紹了SpringBoot自定義注解實現(xiàn)Token校驗的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MyBatis多對多一對多關(guān)系查詢嵌套處理

    MyBatis多對多一對多關(guān)系查詢嵌套處理

    這篇文章主要為大家介紹了MyBatis多對多一對多關(guān)系查詢嵌套處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 淺析NIO系列之TCP

    淺析NIO系列之TCP

    NIO即同步非阻塞式IO,它和傳統(tǒng)的BIO比較最大的區(qū)別在于在執(zhí)行accept、connect、read、write操作時是非阻塞的。很有利于實現(xiàn)用少量線程來處理多個客戶端請求,可以隨時讓線程切換所處理的客戶端,從而可以實現(xiàn)高并發(fā)服務(wù)器的開發(fā)
    2021-06-06
  • springboot使用JPA時間類型進行模糊查詢的方法

    springboot使用JPA時間類型進行模糊查詢的方法

    這篇文章主要介紹了springboot使用JPA時間類型進行模糊查詢的方法,需要的朋友可以參考下
    2018-03-03
  • Java?9?中的模塊Module系統(tǒng)

    Java?9?中的模塊Module系統(tǒng)

    Java?9?引入的模塊是在Java包(package)的基礎(chǔ)上又引入的一個新的抽象層,基于package這一點很重要,這里需要強調(diào)一下,接下來通過本文給大家介紹Java?9?中的模塊Module系統(tǒng),感興趣的朋友一起看看吧
    2022-03-03

最新評論

长春市| 布尔津县| 墨脱县| 武乡县| 德惠市| 灵璧县| 常宁市| 望城县| 邵东县| 鲁甸县| 佛坪县| 礼泉县| 中方县| 富锦市| 大同县| 纳雍县| 于都县| 丽水市| 禄劝| 吉隆县| 清远市| 如东县| 内丘县| 广安市| 诏安县| 祥云县| 莱阳市| 镇巴县| 塔河县| 安多县| 安图县| 吉首市| 彩票| 英山县| 乌鲁木齐县| 凤城市| 青神县| 车险| 芜湖市| 高青县| 南雄市|