如何将消息对象发送到 API 接受多部分文件对象?

问题描述 投票:0回答:1

我希望能够将文件发送到下面的 api,而无需实际创建文件

 @PostMapping(value = "/receiveFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<String> receiveFile(@RequestParam("file") MultipartFile file
                                           ){
}

使用 Spring Integration -

我有以下 JDBC 入站通道适配器

<int-jdbc:inbound-channel-adapter id="jdbcInbound"
                                      channel="inputChannel"
                                      data-source="dataSource"
                                      query="SELECT * FROM Products"
                                      row-mapper="productRowMapper">
                                    
        <int:poller fixed-delay="3600" time-units="SECONDS"/>
    </int-jdbc:inbound-channel-adapter>

channel "inputChannel" 做处理,为下面的每个产品生成一行字符串形式

public class Product{
   String type;
   int price;
   String technology;
  // getters and setters
}

Product p = new Product();
p.setType("ABC");
p.setPrice(10000);
p.setTechnology("X");

Message message = new GenericMessage(p.toString());

// Above message obj looks like as -> GenericMessage[payload=ABC 10000 X] and each message there is a header "fileName"

这些消息被发送到聚合器。行根据此聚合器中的文件名进行分组。它的输出是 file-outbound-channel-adapter,它将文件写出到磁盘

不是在磁盘上创建一个文件并将这一行写入它,而是可以创建一个文件对象(但不是在磁盘上创建一个文件)并将此数据发送到上面的 API?

另一个挑战是,数据将在一天内轮询,在特定时间,我需要将创建的所有行发送到 API,例如在上午 8 点到晚上 8 点之间可能会生成 10,000 个这样的行。我有一个休息 API,调用时应该将所有这些行发送到 API,但作为文件。

java spring-integration multipart
1个回答
0
投票

你不需要创建一个文件对象,你不能没有一个真正的操作系统处理程序。您需要创建一个

MultiValueMap
作为密钥的有效负载,这实际上是一个文件名和您的内容作为一个值。然后
FormHttpMessageConverter
RestTemplate
将完成将此类请求传输到服务的技巧。

我相信同样适用于您的散装货物。

© www.soinside.com 2019 - 2024. All rights reserved.