如何在Play框架中为Blob对象分配默认图像?

时间:2011-06-16 19:12:42

标签: file-upload blob playframework

我跟着这篇好文章 http://www.lunatech-research.com/playframework-file-upload-blob

并拥有完美的图像上传解决方案

我的问题是,如果用户没有选择任何图像,如何在保存期间分配默认图像(可能存储在服务器中)?

if (!user.photo) user.photo= ?; user.save();

我能想到的一个问题是上传默认图像并查看哪个UID“Play”存储在/ tmp目录中并分配上述内容。对此有一个优雅的命名*解决方案吗?

  • 当我说命名时,我的意思是我希望代码看起来像(这意味着我知道我在做什么,如果有多张图片,我也可以编写优雅的自动代码)

user.photo= "images/default/male.jpg"

而不是(这意味着我只是黑客而且我不能优雅地扩展它以获得图片列表)

user.photo= "c0109891-8c9f-4b8e-a533-62341e713a21"

提前致谢

2 个答案:

答案 0 :(得分:3)

我一直采用的方法是不更改空图像的模型,而是在视图中执行某些操作以显示默认图像(如果图像不存在)。我认为这是一种更好的方法,因为您的模型会因显示目的而损坏,这是不好的做法(例如,您可能希望能够看到所有未选择图像的人)。

要实现此目的,您可以在自己的视图中使用exists()字段上的Blob方法。代码看起来像

#{if user.photo.exists()}
  <img src="@{userPhoto(user.id)}">
#{/if}
#{else}
  <img src="@{'public/images/defaultUserImage.jpg'}">
#{/else}

我在上面的代码中假设您正在使用Lunatech文章中描述的操作userPhoto来渲染图像。

答案 1 :(得分:1)

我假设您可以将默认图像存储在应用程序源文件夹中的某个位置并使用

user.photo.set(new FileInputStream(photo), MimeTypes.getContentType(photo.getName()));

保存数据。照片只是一个File对象,因此您可以获取默认图像的参考并使用它。