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

RestTemplate上傳、下載文件實(shí)例代碼

 更新時(shí)間:2025年02月10日 08:54:48   作者:淋雨一直走啊  
介紹了文件上傳和下載的基本方法,包括處理本地文件和文件流,上傳時(shí)區(qū)分了文件是否在本地,下載時(shí)強(qiáng)調(diào)返回值為byte[],并提供了工具類進(jìn)行進(jìn)一步處理

上傳

上傳文件分兩種

  • ①要處理的文件本身存在當(dāng)前文件系統(tǒng)下
  • ②要處理的文件只是個(gè)臨時(shí)文件,或者說是文件流的形式存在

在以下代碼中會分別標(biāo)注

private static void upAttach() {
    String uploadUrl = "http://192.168.1.10/upload";
    String appId = "";
    String accessKey = "";
    String filePath = "";
    String originalFilename = "test.xlsx";
    
    long currentTimeMillis = System.currentTimeMillis();
    String timeMillis = String.valueOf(currentTimeMillis);
    // 文件路徑
    String base64key = Base64.encodeBase64String(filePath.getBytes());
    String sign = getSign(appId, base64key, timeMillis, accessKey);

    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(3);
    
    // @Deprecated 
    // Write to temporary file and then process, need to be deleted and tends to generate too much garbage
    // Path tempFile = Files.createTempFile("upload-file", ".txt");
    // Files.write(tempFile, file.getBytes());
    // params.add("file", new FileSystemResource(tempFile.toFile()));

	// ============================== 這里是重點(diǎn) ==============================
    // ① 文件存在,直接獲取文件輸入流即可
	File file = new File("c:\\test.xlsx");
    params.add("file", new InputStreamResource(file.getInputStream(), originalFilename));

	// ② 臨時(shí)文件,如MultipartFile,獲取其字節(jié)流來處理
	MultipartFile multipartFile = null;
	byte[] byteArray = multipartFile.getBytes();
    ByteArrayResource byteArrayResource = new ByteArrayResource(byteArray) {
        @Override
        public String getFilename() {
        	// 這里不指定文件名的話,上傳過去的文件名會亂碼
            return originalFilename;
        }
    };
    params.add("file", byteArrayResource);
	// ========================================================================

	// 其他參數(shù)按需采用	
    // key為文件路徑
    params.add("key", filePath);

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);
    headers.add("x-fs-timestamp", timeMillis);
    headers.add("x-fs-appid", appId);
    headers.add("x-fs-sign", sign);
    HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);

    RestTemplate restTemplate = SpringUtils.getBean(RestTemplate.class);
    restTemplate.postForObject(uploadUrl, requestEntity, JSONObject.class);
}


/** 加密 **/
private static String getSign(String appId, String base64key, String timestamp, String accessKey) {
    String sign = appId + "|" + base64key + "|" + timestamp;
    return new HmacUtils(HmacAlgorithms.HMAC_SHA_256, accessKey).hmacHex(sign);
}

下載

下載只需要注意返回值為byte[]即可:

// resource為文件唯一標(biāo)識,按需采用
public static final byte[] dwAttach(String resource) {
    String appId = "";
    String accessKey = "";

    long currentTimeMillis = System.currentTimeMillis();
    String timeMillis = String.valueOf(currentTimeMillis);
    String base64key = Base64.encodeBase64String(resource.getBytes());
    String sign = getSign(appId, base64key, timeMillis, accessKey);

    String downloadUrl = "http://192.168.1.10?appid={appId}&timestamp={timestamp}&sign={sign}";
    HashMap<String, Object> uriVariables = new HashMap<>(5);
    uriVariables.put("appId", appId);
    uriVariables.put("timestamp", timeMillis);
    uriVariables.put("sign", sign);
    RestTemplate restTemplate = SpringUtils.getBean(RestTemplate.class);

    return restTemplate.getForObject(downloadUrl, byte[].class, uriVariables);
}

后續(xù)可通過new ByteArrayInputStream(byte[])轉(zhuǎn)換成流,或者org.springframework.util.FileCopyUtils, org.apache.commons.io.FileUtils等工具類,進(jìn)行其他處理。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot處理跨域的實(shí)現(xiàn)方式(附Demo)

    Springboot處理跨域的實(shí)現(xiàn)方式(附Demo)

    這篇文章主要介紹了Springboot處理跨域的實(shí)現(xiàn)方式(附Demo),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • IntelliJ IDEA 中編寫 Speak 程序的詳細(xì)步驟和指南

    IntelliJ IDEA 中編寫 Speak 程序的詳細(xì)步驟和指南

    本文介紹了如何在IntelliJIDEA中編寫一個(gè)語音交互程序,包括環(huán)境準(zhǔn)備、編寫代碼、運(yùn)行和測試以及調(diào)試優(yōu)化,通過使用GoogleCloud的語音處理API,可以實(shí)現(xiàn)語音轉(zhuǎn)文本和文本轉(zhuǎn)語音功能,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • 使用React和springboot做前后端分離項(xiàng)目的步驟方式

    使用React和springboot做前后端分離項(xiàng)目的步驟方式

    這篇文章主要介紹了使用React和springboot做前后端分離項(xiàng)目的步驟方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • springboot關(guān)閉druid監(jiān)控 druid2改配置文件無效的解決

    springboot關(guān)閉druid監(jiān)控 druid2改配置文件無效的解決

    這篇文章主要介紹了springboot關(guān)閉druid監(jiān)控 druid2改配置文件無效的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java中的內(nèi)部類超詳細(xì)講解

    Java中的內(nèi)部類超詳細(xì)講解

    內(nèi)部類是定義在另一個(gè)類內(nèi)部的類,可分為成員、靜態(tài)、局部和匿名內(nèi)部類,這篇文章主要介紹了Java中內(nèi)部類的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • Java JVM調(diào)優(yōu)五大技能詳解

    Java JVM調(diào)優(yōu)五大技能詳解

    這篇文章主要為大家介紹了JVM調(diào)優(yōu)的五大技能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Android圖片轉(zhuǎn)換器代碼分享

    Android圖片轉(zhuǎn)換器代碼分享

    本文給大家總結(jié)了下在安卓程序中進(jìn)行圖片轉(zhuǎn)換的方法,非常的實(shí)用,小伙伴們可以參考下。
    2015-10-10
  • Spring Boot接口設(shè)計(jì)防篡改、防重放攻擊詳解

    Spring Boot接口設(shè)計(jì)防篡改、防重放攻擊詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot接口設(shè)計(jì)防篡改、防重放攻擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • mybatisplus開啟sql打印的三種方式匯總

    mybatisplus開啟sql打印的三種方式匯總

    這篇文章主要介紹了mybatisplus開啟sql打印的三種方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • 詳解SpringBoot的Run方法

    詳解SpringBoot的Run方法

    本文給大家介紹了SpringBoot的Run方法,文中通過實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-10-10

最新評論

佛冈县| 文水县| 靖远县| 祁东县| 泰州市| 射阳县| 青龙| 福安市| 安溪县| 乌兰察布市| 祁阳县| 东方市| 泾川县| 望都县| 腾冲县| 保定市| 肇源县| 德清县| 曲阳县| 久治县| 桐乡市| 定日县| 淮阳县| 庄浪县| 临颍县| 浦东新区| 珲春市| 保康县| 连云港市| 定州市| 石狮市| 金门县| 宁化县| 新沂市| 分宜县| 汾阳市| 静海县| 山西省| 晋城| 临潭县| 鄂托克前旗|