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

pcww981p  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(111)

我试图导出一个特定的字符串作为csv文件,我希望用户能够下载此文件。IHP具有createTemporaryDownloadUrl函数,该函数接受StoredFile,然后创建临时下载链接。问题是,我不想在服务器上存储这个CSV文件,因为它需要额外的开销,比如在临时下载链接过期后删除文件。
我能够使用renderPlain呈现文本变量,但我不完全确定如何自动化下载过程(因为用户必须右键单击,下载为,然后自己重命名文件)
我首先尝试使用常规的createTemporaryDownloadUrl方法来存储文件,但是在临时下载URL过期后没有简单的方法删除文件。我能够将CSV内容显示为纯文本文件,但没有明显的方法让用户下载它。

tkclm6bt

tkclm6bt1#

在您的操作中,您可以设置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
...

setHeader用于告诉浏览器下载指定名称的文件,然后renderPlain将文件内容发送给浏览器。
当然,通过将文件名更改为不同的文件扩展名,这可以用于任何类型的文本文件。
希望这对你有帮助!

相关问题