如何通过POST在JAVA中发送文件而不将其保存到磁盘

时间:2019-11-17 06:39:13

标签: spring post multipartform-data resttemplate

我需要从服务器端代码将文件发送到POST服务。 我需要发送的文件内容为字符串格式。 我不想在磁盘上创建文件。 没有在磁盘中创建文件,我找不到发送文件的方法。

我更愿意不要创建TEMP文件,但这是我设法做到的。

如何发送文件而不将其保存到磁盘,甚至不保存为TEMP文件?

这是代码:

    String fileContent = generateFile();

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);
    headers.add("apikey","myapikey");

    File tmpFile = File.createTempFile("test", ".tmp");
    FileWriter writer = new FileWriter(tmpFile);
    writer.write(fileContent);
    writer.close();

    BufferedReader reader = new BufferedReader(new FileReader(tmpFile));
    reader.close();

    FileSystemResource fsr = new FileSystemResource(tmpFile);

    MultiValueMap<String, Object> body
            = new LinkedMultiValueMap<>();
    body.add("file",fsr);

    HttpEntity<MultiValueMap<String, Object>> requestEntity
            = new HttpEntity<>(body, headers);

    String serverUrl = "https://api.com/api";

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<String> response = restTemplate
            .postForEntity(serverUrl, requestEntity, String.class);

    return response.getBody();

我用于测试API的POSTMAN屏幕截图

POSTMAN Body

POSTMAN Headers

1 个答案:

答案 0 :(得分:0)

改为使用ByteArrayResource

String fileContent = generateFile();
ByteArrayResource bar = new ByteArrayResource(fileContent.getBytes());

这样,您将不必在磁盘上创建任何资源,而只需将其保留在内存中即可。