玩! + GAE +文件上传

时间:2011-06-14 20:08:31

标签: google-app-engine file-upload playframework

通常使用Play框架,当您上传文件时,它显示为控制器的File对象,文件本身存储在tmp文件夹中。在GAE中这不起作用,因为GAE不允许写入文件系统。

如何上传文件并直接在控制器中访问流?

2 个答案:

答案 0 :(得分:3)

所以我想出了解决方案。在控制器中,您只需传入一个byte [],而不是传入File对象,并使用ByeArrayInputStream将其转换为更有用的形式。在我的情况下,我需要将文件数据传递给一个带有InputStream的csv解析器。

答案 1 :(得分:0)

我不熟悉播放框架,但一般来说,对于多部分请求(例如文件上传),

  1. 如果输入大小足够大,来自输入流的数据将写入本地文件系统上的临时文件
  2. 然后将请求分派给您的控制器
  3. 您的控制器从框架中获取File对象。 (此文件对象指向临时文件)
  4. 对于apache commons上传,您可以使用DiskFileItemFactory设置大小阈值,然后框架决定是将文件写入磁盘还是将其保留在内存中。如果保留在内存中,框架会将数据复制到DataOutputStream(这是透明地完成的,因此您的servlet仍将使用File对象,而无需知道文件是在磁盘上还是在内存中)。

    也许播放框架有类似的配置。