4

我创建了一个应用程序来生成条形码图像,该图像使用以下代码将图像存储在 public/images/barcode

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)

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

4

2 回答 2

3

无论如何,您可能不想写入 heroku 上的文件系统。这是文档的相关部分:

临时文件系统

每个 dyno 都有自己的临时文件系统,以及最近部署的代码的新副本。在 dyno 的生命周期中,它的运行进程可以将文件系统用作临时暂存器,但是任何其他 dyno 中的进程都看不到写入的文件,并且在停止或重新启动 dyno 时,写入的任何文件都将被丢弃。

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

于 2012-12-26T16:13:49.280 回答
1

在进入生产模式之前调用 dist 时,Play 会打包所有文件,这意味着路由器不会找到在此之后创建的文件。我还没有尝试过 2.1,这可能已被修复,我记得在邮件列表中看到了一些关于此的内容。我认为您想使用 ExternalAssets 类。

于 2012-12-27T08:33:16.207 回答