Micronaut 文件傳輸

2023-03-07 14:00 更新

Micronaut 支持通過幾種簡單的方式向客戶端發(fā)送文件。

發(fā)送文件對象

可以從控制器方法返回一個 File 對象,數(shù)據(jù)將返回給客戶端。文件響應(yīng)的 Content-Type 標(biāo)頭是根據(jù)文件名計算的。

要控制正在發(fā)送的文件的媒體類型,或設(shè)置要下載的文件(即使用 Content-Disposition 標(biāo)頭),請使用要使用的文件構(gòu)造一個 SystemFile。例如:

發(fā)送系統(tǒng)文件

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

發(fā)送輸入流

對于無法引用 File 對象的情況(例如 JAR 文件中的資源),Micronaut 支持傳輸輸入流。要從控制器方法返回數(shù)據(jù)流,請構(gòu)造一個 StreamedFile。

為方便起見,StreamedFile 的構(gòu)造函數(shù)也接受 java.net.URL。

發(fā)送 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
}

如果正在傳輸?shù)奈募]有更改,并且請求包含適當(dāng)?shù)臉?biāo)頭,則服務(wù)器支持返回 304(未修改)響應(yīng)。此外,如果客戶端接受編碼響應(yīng),Micronaut 會在適當(dāng)時對文件進(jìn)行編碼。如果文件是基于文本的并且默認(rèn)情況下大于 1KB,則會進(jìn)行編碼。數(shù)據(jù)編碼的閾值是可配置的。

要使用自定義數(shù)據(jù)源通過輸入流發(fā)送數(shù)據(jù),請構(gòu)造 PipedInputStream 和 PipedOutputStream 以將數(shù)據(jù)從輸出流寫入輸入。確保在單獨(dú)的線程上完成工作,以便可以立即返回文件。

緩存配置

默認(rèn)情況下,文件響應(yīng)包含緩存標(biāo)頭。以下選項確定如何構(gòu)建 Cache-Control 標(biāo)頭。

表 1. FileTypeHandlerConfiguration 的配置屬性
屬性 類型 描述

netty.responses.file.cache-seconds

int

緩存秒。默認(rèn)值 (60)。

表 2. CacheControlConfiguration 的配置屬性
屬性 類型 描述

netty.responses.file.cache-control

FileTypeHandlerConfiguration$CacheControlConfiguration

設(shè)置緩存控制配置。

netty.responses.file.cache-control.public

boolean

設(shè)置緩存控件是否公開。默認(rèn)值(假)


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號