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

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

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

大家好,因?yàn)榻谧鲂枨笾杏龅搅宋募蟼鬟@個(gè)東西,而且我這個(gè)還是跨服務(wù)去傳輸文件的所以我這邊使用了httpclient和RestTemplate去做,但是最后還是用的httpclientfeign和RestTemplate在超大文件下會(huì)OOM所以適用于小文件傳輸我這邊測試的在1G以下。httpclient好像是無限哈哈哈。(具體多少大家有時(shí)間可以去測一下)

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

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

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

1.RestTemplate

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

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

  @Autowired
  RestTemplateBuilder builder;

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

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

這里有幾個(gè)要注意的地方

1.必須重寫否則傳輸時(shí)報(bào)錯(cuò)

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

2.設(shè)置請(qǐng)求頭因?yàn)榫驮谀M前端發(fā)送上傳文件的請(qǐng)求所以請(qǐng)求頭必須是multipart/form-data

3.第三個(gè)參數(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

以上是注意事項(xiàng)。

@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封裝整個(gè)請(qǐng)求報(bào)文
    HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);

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

    return flag;
  }

3.HttpClient

1.使用httpclient的話首先要引入pom文件坐標(biāo)。

 <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遠(yuǎn)程調(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é)

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

強(qiáng)強(qiáng)強(qiáng)

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

相關(guān)文章

  • Java使用Hutool實(shí)現(xiàn)AES、DES加密解密的方法

    Java使用Hutool實(shí)現(xiàn)AES、DES加密解密的方法

    本篇文章主要介紹了Java使用Hutool實(shí)現(xiàn)AES、DES加密解密的方法,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • java string 轉(zhuǎn)date方法如何實(shí)現(xiàn)

    java string 轉(zhuǎn)date方法如何實(shí)現(xiàn)

    在開發(fā)應(yīng)用中經(jīng)常會(huì)使用到j(luò)ava string 轉(zhuǎn)date這種不是很常見的做法,本文將以此問題提供詳細(xì)解決方案,需要了解的朋友可以參考下
    2012-11-11
  • 詳解SpringBoot讀取resource目錄下properties文件的常見方式

    詳解SpringBoot讀取resource目錄下properties文件的常見方式

    這篇文章主要介紹了SpringBoot讀取resource目錄下properties文件的常見方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 什么是遞歸?用Java寫一個(gè)簡單的遞歸程序

    什么是遞歸?用Java寫一個(gè)簡單的遞歸程序

    這篇文章主要介紹了什么是遞歸?用Java寫一個(gè)簡單的遞歸程序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java實(shí)現(xiàn)微信紅包分配規(guī)則

    Java實(shí)現(xiàn)微信紅包分配規(guī)則

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)仿微信紅包分配規(guī)則,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 詳細(xì)聊聊SpringBoot中動(dòng)態(tài)切換數(shù)據(jù)源的方法

    詳細(xì)聊聊SpringBoot中動(dòng)態(tài)切換數(shù)據(jù)源的方法

    在大型分布式項(xiàng)目中,經(jīng)常會(huì)出現(xiàn)多數(shù)據(jù)源的情況,下面這篇文章主要給大家介紹了關(guān)于SpringBoot中動(dòng)態(tài)切換數(shù)據(jù)源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Java的四種常見線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解

    Java的四種常見線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java的四種常見線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解,在Java中,我們可以通過Executors類來創(chuàng)建ScheduledThreadPool,Executors類提供了幾個(gè)靜態(tài)方法來創(chuàng)建不同類型的線程池,包括ScheduledThreadPool,需要的朋友可以參考下
    2023-09-09
  • 使用Mybatis接收Integer參數(shù)的問題

    使用Mybatis接收Integer參數(shù)的問題

    這篇文章主要介紹了使用Mybatis接收Integer參數(shù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 如何使用Java中的Optional

    如何使用Java中的Optional

    這篇文章主要介紹了如何使用Java中的Optional,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • Spring mvc整合tiles框架的簡單入門教程(maven)

    Spring mvc整合tiles框架的簡單入門教程(maven)

    這篇文章主要給大家介紹了關(guān)于Spring mvc整合tiles框架的簡單入門教程(maven),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來一起看看詳細(xì)的介紹吧。
    2017-12-12

最新評(píng)論