【问题标题】:How to send file in JAVA via POST without saving it to disk如何通过 POST 在 JAVA 中发送文件而不将其保存到磁盘
【发布时间】:2019-11-17 06:39:13
【问题描述】:

我需要从服务器端代码向 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 屏幕截图,它运行良好

【问题讨论】:

  • 对于这种用例,我个人更喜欢使用byte 数据类型。并将其解析为服务器端和客户端的相关数据类型。
  • 我不确定这如何回答我的问题
  • @user1913615 发送完文件后,要不要评论一下?
  • 我的意思是如果你可以处理服务器端(发送 POST 请求的地方),将字节数组作为输入,然后将其转换为所需的数据类型。
  • @Avijit Barua,没有。

标签: spring post multipartform-data resttemplate


【解决方案1】:

改用ByteArrayResource

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

这样您就不必在磁盘上创建任何资源,而是将其保存在内存中。

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多