snp*_*p0k 4 playframework-2.0 playframework-2.1 playframework-2.2
我使用playframework 2.2.1和Java,
我试图传递BufferedImage或ByteArray或ByteArrayInputStream
来查看模板,以便直接从内存中显示在浏览器中,
而不保存到服务器存储.
在我的视图模板中,我请求一个图像:
<img src="@{Application.getImage()}"/>
Run Code Online (Sandbox Code Playgroud)
我的应用控制器:
public static Result getImage() throws IOException{
BufferedImage image = ImageIO.read(new File("public/img/1.jpg"));
//some image manipulations
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
return ok(baos.toByteArray()).as("image/jpg");
}
Run Code Online (Sandbox Code Playgroud)
在生成的HTML中我得到:
<img src="SimpleResult(200, Map(Content-Type -> image/jpg))">
Run Code Online (Sandbox Code Playgroud)
我发现了一些关于这个主题的信息(一,二,三,四),
但它通常与旧版本或Scala版本的游戏有关.
请提出建议或指出我的错误,
谢谢
Ben*_*hik 10
对于字节数组图像,这是我的解决方案(基于stackoverflow中的其他解决方案):
控制者:
public static Result getImage(Long id) {
Entity entity = Entity.find.byId(id);
ByteArrayInputStream input = null;
if (entity.getImage() != null) {
input = new ByteArrayInputStream(entity.getImage());
} else {
try {
byte[] byteArray;
File file = Play.getFile("/public/images/no_photo.jpg", Play.current());
byteArray = IOUtils.toByteArray(new FileInputStream(file));
input = new ByteArrayInputStream(byteArray);
} catch (Exception e) {
}
}
return ok(input).as("image/jpeg");
}
Run Code Online (Sandbox Code Playgroud)
路线档案:
GET /entity/image/:id controllers.Entities.getImage(id:Long)
Run Code Online (Sandbox Code Playgroud)
风景:
<img src=@{routes.Entities.getImage(entity.getId())}>
Run Code Online (Sandbox Code Playgroud)
您应该使用操作路径getImage()而不是其Resultinsrc属性:
<img src='@routes.Application.getImage()'/>
Run Code Online (Sandbox Code Playgroud)
顺便说一句:虽然我们不知道您对图像进行了什么样的处理,但有时将它们保存到光盘上是有意义的 - 特别是当它们有可能被重复使用时。在这种情况下,您可以通过以下方式退货:
return ok(new File("/path/to/file"));
Run Code Online (Sandbox Code Playgroud)
当然仍然使用routeas src;)
| 归档时间: |
|
| 查看次数: |
5964 次 |
| 最近记录: |