最新国产好看的视频,伊人天堂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ù)膯栴},本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

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

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去管理所以先來一個配置類。
2.@SuppressWarnings(“all”) 這個注解是jdk自帶的的意思是 意志所有的警告。

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

  @Autowired
  RestTemplateBuilder builder;

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

2.RestTemplate遠(yuǎn)程調(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文件坐標(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大文件會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進(jìn)行微服務(wù)交互方式(微服務(wù)接口互相調(diào)用)

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

    這篇文章主要介紹了使用FeignClient進(jìn)行微服務(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校驗的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MyBatis多對多一對多關(guān)系查詢嵌套處理

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

    這篇文章主要為大家介紹了MyBatis多對多一對多關(guān)系查詢嵌套處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jì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時間類型進(jìn)行模糊查詢的方法

    springboot使用JPA時間類型進(jìn)行模糊查詢的方法

    這篇文章主要介紹了springboot使用JPA時間類型進(jìn)行模糊查詢的方法,需要的朋友可以參考下
    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

最新評論

新邵县| 奈曼旗| 双辽市| 农安县| 普兰店市| 安新县| 钦州市| 阳山县| 临西县| 广德县| 新绛县| 固安县| 涞源县| 宜川县| 巴青县| 鄂尔多斯市| 盈江县| 库尔勒市| 分宜县| 富裕县| 建德市| 来安县| 珠海市| 苍梧县| 平阴县| 衡山县| 竹山县| 巴彦淖尔市| 民权县| 司法| 高台县| 剑河县| 沁阳市| 衡水市| 曲阜市| 昌乐县| 独山县| 元江| 含山县| 开化县| 渭源县|