stream - 使用WebFlux的响应zip文件

标签 stream kotlin reactive-programming spring-webflux rx-kotlin

我是Spring 5和Reactive Programming的新手。我的问题是通过rest API为数据库创建导出功能。
用户点击GET请求->服务器读取数据并以zip文件形式返回数据。由于zip文件很大,因此我需要流式传输这些数据。
我的代码如下:

    @GetMapping(
    value = "/export",
    produces = ["application/octet-stream"],
    headers = [
              "Content-Disposition: attachment; filename=\"result.zip\"",
              "Content-Type: application/zip"])
    fun streamData(): Flux<Resource> = service.export()

我使用curl如下:
curl http://localhost/export -H "Accept: application/octet-stream"

但是它总是返回406 Not Acceptable 。
有人帮忙吗?

非常感谢

最佳答案

headers批注的@GetMapping属性不是应写入HTTP响应的 header ,而是映射 header 。这意味着您的@GetMapping批注需要HTTP请求包含您列出的 header 。这就是为什么该请求实际上未映射到您的 Controller 处理程序的原因。

现在,您的处理程序返回类型看起来不正确-Flux<Resource>意味着您打算返回0..* Resource实例,并且应该对其进行序列化。在这种情况下,像ResponseEntity<Resource>这样的返回类型可能是一个更好的选择,因为您将能够在ResponseEntity上设置响应 header ,并使用Resource设置其主体。

关于stream - 使用WebFlux的响应zip文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48414894/

相关文章:

android - Coroutines Channel values consumeEach waits 而不是一次消费

kotlin - Kotlin Collection 的 `component1` 到 `component5` 有什么用?

java - 如何检测重试 Flux 中的恢复?

ios - RxSwift、MVVM - 无法使用 RxSwift 绑定(bind)实现 UITableViewDataSource 方法

java - 无法启动 spring boot web 应用程序

java - 如何获得 AudioInputStream 的持续时间?

c# - "Parameter not valid"加载System.Drawing.Image异常

c# - 为什么 StreamReader 返回字符串而不是字节数组

php - Stream_socket_client 无法连接(连接超时)

java - 错误:无法下载kotlin-gradle-plugin.jar(org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50):没有可用于脱机的缓存版本