2013-08-14 1 views
0

В самом начале - извините за мой английский.Играть! 2 с Java на heroku, сохранить файл временно

Я разрабатываю игровое приложение в Java и разворачиваю его в герою. Мне нравится создавать картинку (точно QRCode), хранить ее временно и отображать ее на следующей странице. Я действительно знаю о ephemeral файловой системе herokus, но если я правильно понимаю, в стек кедра, я могу создавать файлы везде, где захочу, пока все в порядке, что они не будут храниться долгое время. Приложение просто нужно создать QR, я сканирую его, и файл можно удалить.

Кажется, что файл не создан. Любые идеи о том, как мне удастся временно сохранить и показать свои QR-коды?

Контроллер

public class Application extends Controller { 

    private static String workingDirectory = "public/images/"; 
    public static Result qrCode() { 
     String msg = "I am a QR-String"; 
     BufferedImage image = (BufferedImage) QR.stringToImage(msg); 

     String imgPath = workingDirectory+"posQR.png"; 

     try{ 
      File outputfile = new File(imgPath); 
      ImageIO.write(image,"png",outputfile); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
     return ok(views.html.qrCode.render()); 
    } 
} 

Посмотреть QRcode

<img src="@routes.Assets.at("images/posQR.png")"> 

Edit 1

Хранится изображение как TempFile в передаете его зрения. На геройке локальный вид содержит точный абсолютный путь, но изображение не загружается. Любые идеи остались?

Контроллер

public class Application extends Controller { 

    private static String workingDirectory = "public/images/"; 
    public static Result qrCode() { 
     String msg = "I am a QR-String"; 
     BufferedImage image = (BufferedImage) QR.stringToImage(msg); 
    File outputfile = null; 
     String imgPath = workingDirectory+"posQR.png"; 

     try{ 
      outputfile = File.createTempFile("posQR",".png"); 
      ImageIO.write(image,"png",outputfile); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
      return ok(views.html.qrCode.render(outputfile.getAbsolutePath())); 
} 

Посмотреть QRcode

@(qrPath: String) 
... 
<img id="qr" [email protected]> 
+0

Вы получаете трассировку стека при записи на диск? – Adil

+0

Он отлично работает на местном, но не на героку. – erdbeerchen

+0

Или, может быть, есть эквивалент этого http://stackoverflow.com/questions/4127876/send-generated-image-to-browser-using-play-framework, но в Play 2.x? – erdbeerchen

ответ

0

Это помогло мне: Play! framework 2.0: How to display multiple image?

Finaly я это сделал. Хитрость заключалась не в том, чтобы сделать src = путь, но src = getImage (путь). Все еще странно, но теперь это работает.

маршруты

GET /tmp/*filepath controllers.Application.getImage(filepath: String) 

Применение

public class Application extends Controller { 

public static Result qrCode() { 
    String msg = "I am a QR-String"; 
    BufferedImage image = (BufferedImage) QR.stringToImage(msg); 
    File outputfile = null; 

    try{ 
     outputfile = File.createTempFile("posQR",".png"); 
     ImageIO.write(image,"png",outputfile); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
    return ok(views.html.qrCode.render(outputfile.getAbsolutePath())); 
} 
... 

public static Result getImage(String imgPath){ 
    return ok(new File(imgPath)); 
} 
} 

вид QRcode

@(qrPath: String) 
... 
<img src="@routes.Application.getImage(qrPath)"/> 

Спасибо за вашу помощь: D

0

ли WorkingDirectory конец с разделителем файла?

String imgPath = workingDirectory+"posQR.png"; 
+0

Да, это private static String workingDirectory = "public/images /"; – erdbeerchen

+0

Метод write должен возвращать логическое значение в качестве результата. Что это? Btw try outputfile.getAbsolutePath() и outputfile.canWrite().Другая возможность - File.createTempFile(). –

+0

Возвращаемое значение записи равно true, поэтому canWrite(). По обоим, местным и герою. И оба абсолютных пути заканчиваются на /public/images/posQR.png. – erdbeerchen

Смежные вопросы