Micronaut 文件传输

2023-03-07 14:00 更新

Micronaut 支持通过几种简单的方式向客户端发送文件。

发送文件对象

可以从控制器方法返回一个 File 对象,数据将返回给客户端。文件响应的 Content-Type 标头是根据文件名计算的。

要控制正在发送的文件的媒体类型,或设置要下载的文件(即使用 Content-Disposition 标头),请使用要使用的文件构造一个 SystemFile。例如:

发送系统文件

@Get
public SystemFile download() {
    File file = ...
    return new SystemFile(file).attach("myfile.txt");
    // or new SystemFile(file, MediaType.TEXT_HTML_TYPE)
}

发送输入流

对于无法引用 File 对象的情况(例如 JAR 文件中的资源),Micronaut 支持传输输入流。要从控制器方法返回数据流,请构造一个 StreamedFile。

为方便起见,StreamedFile 的构造函数也接受 java.net.URL。

发送 StreamedFile

@Get
public StreamedFile download() {
    InputStream inputStream = ...
    return new StreamedFile(inputStream, MediaType.TEXT_PLAIN_TYPE)
    // An attach(String filename) method is also available to set the Content-Disposition
}

如果正在传输的文件没有更改,并且请求包含适当的标头,则服务器支持返回 304(未修改)响应。此外,如果客户端接受编码响应,Micronaut 会在适当时对文件进行编码。如果文件是基于文本的并且默认情况下大于 1KB,则会进行编码。数据编码的阈值是可配置的。

要使用自定义数据源通过输入流发送数据,请构造 PipedInputStream 和 PipedOutputStream 以将数据从输出流写入输入。确保在单独的线程上完成工作,以便可以立即返回文件。

缓存配置

默认情况下,文件响应包含缓存标头。以下选项确定如何构建 Cache-Control 标头。

表 1. FileTypeHandlerConfiguration 的配置属性
属性 类型 描述

netty.responses.file.cache-seconds

int

缓存秒。默认值 (60)。

表 2. CacheControlConfiguration 的配置属性
属性 类型 描述

netty.responses.file.cache-control

FileTypeHandlerConfiguration$CacheControlConfiguration

设置缓存控制配置。

netty.responses.file.cache-control.public

boolean

设置缓存控件是否公开。默认值(假)


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号