【发布时间】:2015-11-14 21:25:23
【问题描述】:
我正在使用 Scala Play2 框架并尝试将 SVG 字符串数据转换为其他文件类型,例如 PDF、PNG、JPEG 并将其作为文件发送给客户端。
我想要实现的是
- 客户端通过 Ajax 发送数据(带有非常大的 JSON 的 POST)
- 服务器从 JSON 生成一个文件
- 服务器将文件返回给客户端。
但似乎发送文件并让客户端将其保存为静态文件几乎是不可能的,所以我计划根据客户端请求制作新的静态文件并将其访问 url 返回到客户端并通过 Javascript 打开它。在客户端完成下载后,删除服务器中的文件,在这种方法中,我必须
def generateFile = {
...
...
outputStream.flush() // save the file to a disk
}
和
Ok.sendFile(new File("foo.pdf"))
我需要向存储磁盘写入和读取文件。而且我认为这不是一种有效的方法。
有没有更好的方法来实现我想要的?
提前谢谢你。
【问题讨论】:
-
那么,我理解正确吗? 1)您想通过 AJAX 将 JSON 发送到您的 Play 服务器。 2) Play 然后从 JSON 数据中生成一个文件,并将其存储在公共资产文件夹中的某个位置。 3) Play 将这个生成的文件的 URL 返回给客户端。 4) 然后客户端可以通过 GET 下载带有 URL 的文件。 5) 下载完成后播放会删除文件。对吗?
-
@Kris 几乎就像你提到的那样,但有一点,我没想过要存储 JSON 文件,而是自己生成文件。
-
但是如果我们在这里讨论不同的请求,那么您必须将文件存储在某个地方(例如文件系统)。第一个,AJAX 请求,生成文件,第二个让您下载该文件。由于您的服务器是无状态的,因此您必须将文件存储在某处。
-
@Kris 抱歉,我误读了您所说的内容,您在第一条评论中提到的正是我想要实现的。(我以为您说将 JSON 本身保存到服务器并在客户端生成文件第二个请求。)
-
我也看不到与将文件临时存储在文件系统中不同的解决方案(它是一个文件 - 这就是文件系统的用途,对 :))。为什么你认为这不是一个好的解决方案?
标签: javascript ajax json scala playframework