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

RestTemplate上傳、下載文件實例代碼

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

上傳

上傳文件分兩種

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

在以下代碼中會分別標注

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()));

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

	// ② 臨時文件,如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為文件唯一標識,按需采用
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[])轉換成流,或者org.springframework.util.FileCopyUtils, org.apache.commons.io.FileUtils等工具類,進行其他處理。

總結

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

相關文章

  • 簡單了解java ORM框架JOOQ

    簡單了解java ORM框架JOOQ

    這篇文章主要介紹了簡單了解java ORM框架JOOQ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • spring boot實現(xiàn)文件上傳

    spring boot實現(xiàn)文件上傳

    這篇文章主要為大家詳細介紹了spring boot實現(xiàn)文件上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • IDEA中的打包Build Artifacts圖文詳解

    IDEA中的打包Build Artifacts圖文詳解

    當項目開發(fā)完畢,需要對外發(fā)布時,我們就會用到IDEABuild Artifacts功能,那么如果在idea中打包呢,這篇文章主要介紹了IDEA中的打包Build Artifacts詳解,需要的朋友可以參考下
    2024-03-03
  • Java并發(fā)工具輔助類代碼實例

    Java并發(fā)工具輔助類代碼實例

    這篇文章主要介紹了Java并發(fā)工具輔助類代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • springMVC的RequestMapping請求不到路徑的解決

    springMVC的RequestMapping請求不到路徑的解決

    這篇文章主要介紹了springMVC的RequestMapping請求不到路徑的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • mybatis中使用not?in與?in的寫法說明

    mybatis中使用not?in與?in的寫法說明

    這篇文章主要介紹了mybatis中使用not?in與?in的寫法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java yaml轉properties工具類方式

    java yaml轉properties工具類方式

    這篇文章主要介紹了java yaml轉properties工具類方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 深入分析java并發(fā)編程中volatile的實現(xiàn)原理

    深入分析java并發(fā)編程中volatile的實現(xiàn)原理

    這篇文章主要介紹了深入分析java并發(fā)編程中Volatile的實現(xiàn)原理,涉及Volatile的官方定義,實現(xiàn)原理,使用優(yōu)化等相關內容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java實現(xiàn)登錄驗證碼功能

    java實現(xiàn)登錄驗證碼功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)登錄驗證碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • SpringSecurity攔截器鏈的使用詳解

    SpringSecurity攔截器鏈的使用詳解

    這篇文章主要介紹了SpringSecurity攔截器鏈的使用詳解,webSecurity的build方法最終調用的是doBuild方法,doBuild方法調用的是webSecurity的performBuild方法,webSecurity完成所有過濾器的插件,最終返回的是過濾器鏈代理類filterChainProxy,需要的朋友可以參考下
    2023-11-11

最新評論