如何实现Play2 API服务器通过Ajax返回文件

How to implement Play2 API server returning File via Ajax?

本文关键字:服务器 Ajax 文件 返回 API Play2 何实现 实现      更新时间:2023-09-26

我正在使用Scala Play2框架,并尝试将SVG字符串数据转换为其他文件类型,如PDF,PNG,JPEG,并将其作为文件发送到客户端。

我想达到的是

  1. 客户端发送数据通过Ajax(POST与真正巨大的JSON)
  2. 服务器从JSON
  3. 生成一个文件
  4. 服务器返回文件给客户端。

但似乎这是几乎不可能发送一个文件,让客户端保存为静态文件,所以我计划在客户端请求上创建新的静态文件,并将其访问url返回到客户端,并通过Javascript打开它。在客户端完成下载后,删除服务器上的文件,在这种方法中,我必须

def generateFile = {
 ...
 ...
 outputStream.flush() // save the file to a disk
}

Ok.sendFile(new File("foo.pdf"))

我需要向存储磁盘写入和读取文件。我认为这不是一个有效的方法。

有更好的方法来实现我想要的吗?

提前感谢。

为什么你认为这不够有效?

我在一个项目中见过类似的方法:

  • 使用特殊的命名方案将图像转换并存储在任意tmp目录中
  • 一个专用的服务器资源流图像到客户端
  • 每5分钟触发一次系统cronjob,从tmp目录
  • 删除超过5分钟的映像。

不同之处在于图像数据(在您的示例中是SVG字符串)不是由客户机发送的,而是存储在数据库中。

如果你的转换库能够在内存中生成图像,也许你可以跳过将图像写入磁盘的步骤。