我需要下载存储在数据库中的文件。我相信 snap 有文件工具,可以帮助文件上传和下载,但它只处理驻留在文件系统上的文件。
我得到了有关 snap IRC to writeBS 功能的建议,以将数据推送到浏览器。此外,我被告知要修改 HTTP 标头,以便浏览器将数据视为文件并带来保存/打开对话框。我今天要玩它,还有更多问题。
到目前为止我有这个:
getFirst :: AppHandler ()
getFirst = do
modifyResponse $ setContentType "application/octet-stream" -- modify HTTP header
result <- eitherWithDB $ fetch (select [] "files") -- get the file from db
let doc = either (const []) id result -- get the result out of either
fileName = at "name" doc -- get the name of the file
Binary fileData = at "blob" doc -- get the file data
writeBS fileData
你能告诉我这是否是正确的做法吗?
它有效,但缺少一些东西:
- 如何将文件名和文件类型传递给浏览器?
- 我该如何设置
Content-Disposition
?
所以我需要能够设置这样的东西:
Content-Disposition: attachment; filename=document.pdf
Content-Type: application/pdf
我怎样才能做到这一点?