Play Framework 2:在公共/图像中创建图像

时间:2012-12-26 16:05:07

标签: java scala heroku playframework playframework-2.0

我创建了一个生成条形码图像的应用程序,使用以下代码将图像存储在公共/图像/条形码中

String dir = Play.application().getFile("public/images/barcode").getAbsolutePath();
String barcode = "46062161";
BarcodePrinter.print(barcode,dir + "/"+barcode+".png"); 

public class BarcodePrinter{ 
  private static void Save_image(Image image,String filePath)
  {
    try 
    {
      BufferedImage bi = (BufferedImage) image;
      File outputfile = new File(filePath);
      ImageIO.write(bi, "png", outputfile);
    } catch (IOException e) 
    {
      Logger.info(e.getMessage());
    }
  }
}

并在我的视图文件中

@imgpath(barcode:String) = @{
"/assets/images/barcode/"+barcode+".png"
}
<img src="@imgpath(barcode)" />

此代码仅适用于开发,但在heroku中不起作用。我从日志中得到了这个错误

java.io.FileNotFoundException: /app/target/../public/images/barcode/46062161.png (No such file or directory)

请帮我解决这个问题。感谢

2 个答案:

答案 0 :(得分:3)

你可能不想在heroku上写入文件系统。以下是文档的相关部分:

  

短暂的文件系统

     

每个dyno都有自己的短暂文件系统,并带有新的副本   最近部署的代码。在dyno的一生中它的运行   进程可以使用文件系统作为临时暂存器,但没有   写入的文件对任何其他dyno和中的进程可见   写入的任何文件将在dyno停止时丢弃   重新启动。

最好的解决方案可能是像S3这样的云存储服务。

答案 1 :(得分:1)

在将其置于生产模式之前调用dist时播放打包所有文件,这意味着路由器找不到此后创建的文件。我没有尝试2.1这可能已经修复,我记得在邮件列表上看到了这个。我想你想使用ExternalAssets类。