首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Spring WebClient实现大文件的流式上传

通过Spring WebClient实现大文件的流式上传
EN

Stack Overflow用户
提问于 2020-11-24 21:29:37
回答 1查看 734关注 0票数 0

我遇到了这里提到的同样的问题。

Stream upload 'POST' in Spring WebClient

我需要通过Spring WebClient上传大文件,我不想读取内存中的文件来做到这一点。

我将文件存储在Minio S3存储桶中,接口允许我以java.io.InputStream的形式接收文件。

然后,我想将其作为上载主体流式传输到另一个服务端点。

给出Content type 'application/octet-stream' not supported for bodyType=org.springframework.web.reactive.function.BodyInserters错误的解决方案是通过以下方式产生的:

代码语言:javascript
运行
复制
public String uploadFile(String fileId, String fileName) {
        InputStream fileInputStream = minioClient.getObject(bucketName, fileId);

        return webClient.post()
                .uri(properties.getUrl())
                .contentType(APPLICATION_OCTET_STREAM)
                .headers(httpHeaders -> {
                    httpHeaders.set(FILE_NAME, fileName);
                })
                .bodyValue(BodyInserters.fromResource(fileInputStream)
                .retrieve()
                .bodyToFlux(String.class)
                .blockFirst();
    }
EN

回答 1

Stack Overflow用户

发布于 2020-11-25 22:57:39

您可以尝试使用DataBufferUtils.readInputStream(..) (javadoc)创建Flux<DataBuffer>。然后使用适当的BodyInserters.fromDataBuffers(..) (javadoc)传递给.bodyValue()。这不应该正确地将整个文件加载到内存中,而是缓冲并逐个块地发送。

我不确定这是否可以使用application/octet-stream作为内容类型,因为我还无法对其进行测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64987563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档