問題

我正在嘗試使用Spring RestTemplate使用位元組陣列作為上傳檔案POST / form-data,並且它一直失敗(伺服器拒絕不同型別的錯誤).

我正在使用帶有ByteArrayResource的MultiValueMap.我錯過了什麼嗎?

  最佳答案

是的。

我找到了這篇文章:

https://medium.com/@voziv / posting-abyte-array-intesting -of-file-using-spring-s-resttemplate-568b45140b

作者提到,為了使用Spring RestTemplate POST位元組陣列,需要覆蓋ByteArrayResource的getFileName().

這是文章中的程式碼示例:

 private static void uploadWordDocument(byte[] fileContents, final String filename) {
    RestTemplate restTemplate = new RestTemplate();
    String fooResourceUrl = "http://localhost:8080/spring-rest/foos"; // Dummy URL.
    MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();

    map.add("name", filename);
    map.add("filename", filename);

    // Here we 
    ByteArrayResource contentsAsResource = new ByteArrayResource(fileContents) {
        @Override
        public String getFilename() {
            return filename; // Filename has to be returned in order to be able to post.
        }
    };

    map.add("file", contentsAsResource);

    // Now you can send your file along.
    String result = restTemplate.postForObject(fooResourceUrl, map, String.class);

    // Proceed as normal with your results.
}
 

我嘗試了它,它工作了!

  相同標籤的其他問題

springmultipartform-data