Micronaut 文件传输
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 标头。
属性 | 类型 | 描述 |
---|---|---|
|
int |
缓存秒。默认值 (60)。 |
属性 | 类型 | 描述 |
---|---|---|
|
设置缓存控制配置。 |
|
|
boolean |
设置缓存控件是否公开。默认值(假) |
更多建议: