java—如何通过rest传递包含文件数据的复杂对象

wlsrxk51  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(266)

我需要从一个源下载文件,并通过rest将这些数据传递给另一个应用程序。文件类型目前为:.txt.csv和.zip。文件大小可能高达500mb-1GB。
最好的方法是什么。我应该先把java文件对象转换成字节数组吗?多部分内容类型是否最适合用于此目的?我堆叠了一点,因为我要传输的类可以包含不同的文件类型。
没有代码需要从您的一方只是有一个线索如何处理它以更好的方式!;)
下面要转移的类是:

public class FileEventsRequest {

private File originalFile;

private int rowCount;

private String md5;

private String cobDate;

private File controlFile; }
9nvpjoqh

9nvpjoqh1#

我所做的工作和你最近描述的几乎一模一样!下载我用过的文件-

@PutMapping("/{originalFileName}")
public ResponseEntity<ImmutableDocument> send(@PathVariable String originalFileName, InputStream payload) {
    LOG.info("Receiving: {}", originalFileName);
    sendPayload(payload, originalFileName);
    return ResponseEntity.ok().build();
}

我选择了inputstream,因为用字节数组处理内存中1gb的大量文件通常是个坏主意,可能会破坏堆栈!
把那个文件发给目标-

@Autowired
private RestTemplate sendTemplate;

private ResponseEntity<Void> sendPayload(final InputStream payload, final String originalFileName) throws IOException {
// You can send any other bits of information you need on the headers too
        HttpHeaders headers = new HttpHeaders();
        headers.put("originalFileName", originalFileName);
        headers.setContentType(asMediaType(MimeType.valueOf({desired mimetype})));
        headers.setAccept(singletonList(APPLICATION_OCTET_STREAM));
        HttpEntity<Resource> requestEntity = new HttpEntity<>(new InputStreamResource(payload), headers);
        UriComponentsBuilder builder = fromUriString({someurl});
        UriComponents uriComponents = builder.build().encode();
        return sendTemplate.exchange(uriComponents.toUri(), HttpMethod.POST, requestEntity, Void.class);
    }
}

我还为restemplate使用了自己的配置类,并使用消息转换器发送二进制inputstream-

@Configuration
public class RestClientConfiguration {

@Bean
public RestTemplate sendTemplate(ClientHttpRequestFactory clientHttpRequestFactory) {
    return new RestTemplateBuilder()
        .requestFactory(() -> clientHttpRequestFactory)
        .messageConverters(new ResourceHttpMessageConverter())
        .build();
}

}

相关问题