我创建了一个生成条形码图像的应用程序,使用以下代码将图像存储在公共/图像/条形码中
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)
请帮我解决这个问题。感谢
答案 0 :(得分:3)
你可能不想在heroku上写入文件系统。以下是文档的相关部分:
短暂的文件系统
每个dyno都有自己的短暂文件系统,并带有新的副本 最近部署的代码。在dyno的一生中它的运行 进程可以使用文件系统作为临时暂存器,但没有 写入的文件对任何其他dyno和中的进程可见 写入的任何文件将在dyno停止时丢弃 重新启动。
最好的解决方案可能是像S3这样的云存储服务。
答案 1 :(得分:1)
在将其置于生产模式之前调用dist时播放打包所有文件,这意味着路由器找不到此后创建的文件。我没有尝试2.1这可能已经修复,我记得在邮件列表上看到了这个。我想你想使用ExternalAssets类。