用戶發送一個帖子請求,然后基于該帖子正文創建一個 Excel 檔案 (.xlsx) 并希望將該檔案發回,而不存盤該檔案本身。
def writeAsync(out: OutputStream): Unit = {
Future {
val wb = new XSSFWorkbook
val sheet1: Sheet = wb.createSheet("sheet1");
val os = new ByteArrayOutputStream()
wb.write(os)
os.writeTo(out)
out.close()
wb.close()
}
}
...
pathPrefix("createAndDownloadExcel") {
post {
...
val generatedFileName = "customGeneratedFileName.xlsx" // <-- this name should the file name be like
val (out, source) = StreamConverters.asOutputStream().preMaterialize()
writeAsync(out)
complete(HttpEntity(ContentTypes.`application/octet-stream`, source))
}
}
回應具有檔案名的 excel 內容:“createAndDownloadExcel”,但我希望它具有基于單個生成的檔案名的檔案名。
稍后將根據 POST 正文手動生成名稱,因此 pathPrefix("fixedName.xlsx") 中的簡單更改無法滿足我的需要。
我該如何解決這個問題,能夠為回傳的 OutputStream 提供動態檔案名?
"org.apache.poi" % "poi-ooxml" % "5.2.0"
uj5u.com熱心網友回復:
嘗試添加回應頭Content-Disposition。
HTTP 背景關系中的第一個引數是 inline(默認值,表示它可以顯示在網頁內,或作為網頁)或附件(表示應該下載它;大多數瀏覽器顯示“另存為”對話框,預填充檔案名引數的值(如果存在)。
import akka.http.scaladsl.model.headers.ContentDispositionTypes.attachment
import akka.http.scaladsl.model.headers.`Content-Disposition`
....
respondWithHeader(`Content-Disposition`(attachment, Map("filename" -> "customGeneratedFileName.xlsx"))) {
complete(HttpEntity(ContentTypes.`application/octet-stream`, source))
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412147.html
標籤:
