国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 使用RestTemplate 調用遠程接口上傳文件方式

使用RestTemplate 調用遠程接口上傳文件方式

2022-01-18 18:26y_bccl27 Java教程

這篇文章主要介紹了使用RestTemplate 調用遠程接口上傳文件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

RestTemplate 調用遠程接口上傳文件

問題描述

第三方寫了一個文件上傳的接口,該接口的請求方式為Post請求,請求參數全部是以form-data表單形式進行提交,包含三個參數

  • 第一個:cookie(字符串類型)
  • 第二個:seqNo(字符串類型)
  • 第三個:file(文件類型)

解決方法

使用傳統的Spring Cloud的Feign組件在調用遠程接口實現文件上傳時有時會出現異常錯誤,可考慮使用下述兩種方式文件上傳

第一種方式

使用RestTemplate進行調用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import org.springframework.core.io.InputStreamResource;
import java.io.InputStream;
public class CommonInputStreamResource extends InputStreamResource {
    private long length;
    private String fileName;
    public CommonInputStreamResource(InputStream inputStream, long length, String fileName) {
        super(inputStream);
        this.length = length;
        this.fileName = fileName;
    }
 
    /**
     * 覆寫父類方法
     * 如果不重寫這個方法,并且文件有一定大小,那么服務端會出現異常
     * {@code The multi-part request contained parameter data (excluding uploaded files) that exceeded}
     */
    @Override
    public String getFilename() {
        return fileName;
    }
 
    /**
     * 覆寫父類 contentLength 方法
     * 因為 {@link org.springframework.core.io.AbstractResource#contentLength()}方法會重新讀取一遍文件,
     * 而上傳文件時,restTemplate 會通過這個方法獲取大小。然后當真正需要讀取內容的時候,發現已經讀完,會報如下錯誤。
     */
    @Override
    public long contentLength() {
        long estimate = length;
        return estimate == 0 ? 1 : estimate;
    }
 
    public void setLength(long length) {
        this.length = length;
    }
 
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
try{
    String applySeqNo = "123456";
    String cookie="654321";
    File file=new File("E:\\1.rar");
    FileInputStream fileInputStream=new FileInputStream(file);
 
    //請求頭設置為MediaType.MULTIPART_FORM_DATA類型
    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
    
    //構建請求體
    MultiValueMap<String, Object> requestBody = new LinkedMultiValueMap<>();
    CommonInputStreamResource commonInputStreamResource = null;
    try {
        commonInputStreamResource = new CommonInputStreamResource(fileInputStream,file.length(),file.getName());
    } catch (Exception e) {
        log.error("文件輸入流轉換錯誤",e);
    }
    requestBody.add("cookie", cookie);
    requestBody.add("seqNoFile", applySeqNo);
    requestBody.add("file",commonInputStreamResource);
    HttpEntity<MultiValueMap> requestEntity = new HttpEntity<MultiValueMap>(requestBody, requestHeaders);
    
    //直接調用遠程接口
    ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://xxx.xxx.xxx.xxx:8080/test/upload",requestEntity, String.class);
    System.out.println("返回結果:"+responseEntity.getBody())
}catch (Exception e){
    log.error("遠程調用出現異常:", e);
}

第二種方式

Spring Cloud Feign組件 + MultiValueMap + CommonInputStreamResource

CommonInputStreamResource對象的構造在上面已經實現了這里就不再重復構造,沿用上面的那個就行

feign接口

?
1
2
3
4
5
6
7
8
9
@Component
@FeignClient(name = "taxRecodes", url = "${spider.url}", qualifier = "TaxRecodeFeignClient",fallback = TaxRecodeFallBack.class)
public interface TaxRecodeFeignClient {   
    /**
     * 單證申請-合同信息表附件上傳
     */
    @PostMapping(value = "/attachFile/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String attachFileUpload(MultiValueMap<String, Object> multiValueMap);
}

請求部分

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@PostMapping("/upload")
public void upload(){
    try {
        File file=new File("E:\\1.rar");
        FileInputStream fileInputStream=new FileInputStream(file);
        CommonInputStreamResource commonInputStreamResource = null;
        try {
            commonInputStreamResource = new CommonInputStreamResource(fileInputStream,fileInputStream.available(),file.getName());
        } catch (Exception e) {
            log.error("文件輸入流轉換錯誤:",e);
        }
        MultiValueMap<String, Object> dto=new LinkedMultiValueMap<String, Object>();
        dto.add("cookie","xxx");
        dto.add("file",commonInputStreamResource);
        dto.add("seqNoFile","xxx");
 
        String returnInfo = taxRecodeFeignClient.attachFileUpload(dto);
        JSONObject returnInfoJsonObject = JSONObject.parseObject(returnInfo);
    }catch (Exception e){
        log.error("異常:",e);
    }
}

RestTemplate調用遠程接口添加請求頭

項目中我們經常會碰到與第三方系統對接,通過調用第三方系統中的接口來集成服務,為了接口的安全性都為加一些驗證,比如:

basic、authority等,通過請求頭添加authrization的機制比較容易接入,從第三方系統獲取到authorization,然后請求接口時在請求頭上帶上獲取到的authorization,說了怎么多不如直接上代碼更容易理解。

?
1
2
3
4
5
6
7
8
9
// 獲取第三方的authorization
String auth= OAuthContentHelper.getAuthorizationHeader();
HttpHeaders requestHeader=new HttpHeaders();
// 將獲取到的authorization添加到請求頭
requestHeader.add(AuthConstants.AUTHORIZATION_HEADER,auth);
// 構建請求實體
HttpEntity<Object> requestEntity=new HttpEntity(requestParam,requestHeaders);
// 使用restTemplate調用第三方接口
restTemplate.exchage(url,HttpMethod.POST,requestEntity,responseClass);

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/y_bccl27/article/details/115088532

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
主站蜘蛛池模板: 美女久久久 | 黄片毛片在线观看 | 在线视频se | 黄色地址| 欧美一级在线观看 | 欧美第8页 | 中文字幕久久网 | 欧美电影免费网站 | 亚洲国产中文字幕 | 人人天天操 | 国产精品一二区 | 欧美精品久久 | 黄色片网站| 一区二区免费视频 | 欧美日韩视频在线观看免费 | 在线一区二区三区四区 | 最新国产一区二区 | 午夜四虎 | 一二三区字幕免费观看av | 久久久一| 中文字幕国产一区 | 国产精品免费一区二区三区四区 | 亚洲在线视频 | 国产精品美女久久久久av麻豆 | 欧美电影在线观看 | 亚洲天堂五码 | 国产欧美在线观看 | 亚洲精品久久久久久一区二区 | 国产精品免费大片 | 日韩欧美在线视频 | 欧美日韩成人一区二区 | 精品视频在线播放 | av中文字幕在线播放 | 91精品国产综合久久福利软件 | 国产 日韩 一区 | 蜜桃视频一区 | 亚洲欧美在线观看 | 激情五月婷婷 | 爱干视频 | 亚洲一区在线日韩在线深爱 | 日韩欧美视频 |