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

Play は、プロダクション モードにする前に dist を呼び出すと、すべてのファイルをパッケージ化します。これは、ルーターがその後に作成されたファイルを見つけられないことを意味します。これが修正された可能性のある 2.1 は試していませんが、メーリング リストでこれについて何かを見たのを覚えています。ExternalAssets クラスを使用したいと思います。

于 2012-12-27T08:33:16.207 に答える