用户发送一个post请求,然后我根据post正文创建一个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"
1条答案
按热度按时间b4wnujal1#
尝试添加响应标头Content-Disposition。
HTTP上下文中的第一个参数要么是inline(默认值,表示它可以显示在Web页面内部,或者作为Web页面),要么是attachment(表示它应该被下载;大多数浏览器显示“另保存为”对话框,如果存在,则预先填充文件名参数的值)。