是否有替代 createTemporaryDownloadUrl 的方法,不需要在服务器上存储文件?

Pio*_*atr 4 haskell http ihp

我正在尝试将特定字符串导出为 csv 文件,并且希望用户能够下载该文件。IHP 具有 createTemporaryDownloadUrl 函数,该函数接收 StoredFile,然后创建临时下载链接。问题是,我不想将此 CSV 文件存储在服务器上,因为它需要额外的开销,例如在临时下载链接过期后删除该文件。

我可以使用 renderPlain 渲染文本变量,但我不完全确定如何自动化下载过程(因为用户必须右键单击,下载为,然后自己重​​命名文件)

我首先尝试通过存储文件来使用常规的 createTemporaryDownloadUrl 方法,但在临时下载 url 过期后没有简单的方法删除文件。我能够将 CSV 内容显示为纯文本文件,但没有明显的方法让用户下载它。

小智 5

在您的操作中,您可以设置Content-Disposition标头以触发类型变量的下载Text。在此示例中,我将分别使用fileNamefileContent作为文件的名称和内容:

...
    action DownloadCSV = do
      ...
      -- These could be from the database, etc
      let fileName = "MyFile.csv"
          fileContent = "Name, Age\nBob, 30"
      setHeader ("Content-Disposition", "attachment; filename = " ++ cs fileName)
      renderPlain $ cs fileContent
...
Run Code Online (Sandbox Code Playgroud)

setHeader用于告诉浏览器下载给定名称的文件,然后renderPlain向浏览器发送文件内容。

当然,通过将文件名更改为不同的文件扩展名,这可以用于任何类型的文本文件。

希望这可以帮助!