播放测试对象Yaml的框架图像BLOB文件

如何使用yaml结构设置Test Blob Image?

另外,BLOB文件的数据库结构是什么? (MySQL的)

我刚刚在一个项目中遇到过同样的问题。 然而,由于我找不到使用fixture来解决这个问题的方法(因为数据库将blob对象存储为Pere上面解释的字符串),我创建了一个解决方法,至少在测试用例场景中解决了这个问题。 我创建了以下文件/app/job/Bootstrap.java:

import play.test.*; import play.jobs.*; import play.db.DB; import models.*; import java.util.List; @OnApplicationStart public class Bootstrap extends Job { public void doJob() { // Load default data if the database is empty if(Item.count() == 0) { Fixtures.loadModels("my_fixtures.yml"); List allItems = Item.findAll(); for (Item a: allItems){ DB.execute("UPDATE `Item` SET image='item_" + a.name.toLowerCase() + ".png|image/png' WHERE id=" + a.getId()); } } } } 

我做的第一件事就是如果数据库中没有存储“项目”,则用初始数据填充数据库。
第二件事是迭代所有播放的’Item’! 只存储在数据库中,从“my_fixtures.yml”文件中读取。 对于每个项目,字符串字段将更新,如上例所示。

我知道这不是OP中问题的答案,但它提供了一些解决这个问题的想法。

编辑:在上面给出的示例中,我假设图片是手动上传到application.conf中给出的附件文件夹,并且每个图像名称都是:“item_ ”,扩展名为“.png”

那么,在这一点上玩很奇怪。

blob 不会保存到数据库中,而是保存application.conf定义的上传文件夹中。 它是保存在数据库中的文件的路径。

我现在无法检查它,但我似乎记得它们被保存为textuel表示(VARCHAR,TEXT)

如果我没记错的话,blob会保存在文件系统中,默认情况下保存在“data / attachments”下,但您可以在配置中更改它( application.conf

在数据库中,它作为String(大多数数据库中的varchar)存储,具有两个组件:名称和mime类型。 看起来像:

 12345asbcdefghi12345abcdfed|image/jpeg 

第一部分是文件的名称。 上传文件时Play会生成一个唯一的UUID作为名称以避免冲突。 是的,这意味着你丢失了原来的名字。 (注意:现在我对名字部分有疑问,我发誓它会丢失,但我可能错了!)

第二部分(在|之后)是myme类型。 Play使用magic-myme库自动检测它。

你可以在这里看到代码。

这是Unji的答案的修改版本,它从conf中的文件夹加载图像,请注意我已删除所有import语句:

 /** * A job executed when the application starts. */ @OnApplicationStart public class Bootstrap extends Job { /** * Loads the initial data if there are no * WebAdministrators at the database. * 

* It loads images on the post with the following criteria: *

    *
  1. file loaction: /conf/initialMedia/
  2. *
  3. file name: {post.title.toCamelCase()}-{i}.jpg
  4. *
* Where i must start in 0. *

*/ @Override public void doJob() { // Check if the database is empty if(WebAdministrator.count() == 0) { Logger.info("Loading Initial Data."); Fixtures.loadModels("initial-data.yml"); List posts = Post.findAll(); for (Post post: posts) { Logger.info("Looking for files for post: [" + post.title + "]"); for (int i=0; true; i++) { VirtualFile vf = VirtualFile.fromRelativePath("/conf/initialMedia/" + JavaExtensions.camelCase(post.title) + "-" + i + ".jpg"); File imageFile = vf.getRealFile(); if (imageFile.exists()) { try { Blob blobImage = new Blob(); blobImage.set(new FileInputStream(imageFile), MimeTypes.getContentType(imageFile.getName())); MediaItem mediaItem = new Image(blobImage); mediaItem.save(); post.mediaItems.add(mediaItem); post.save(); Logger.info("File: [%s] Loaded", imageFile.getAbsolutePath()); } catch (FileNotFoundException e) { // this should never happen. } } else { Logger.info("Media Loaded for post [%s]: %d files.", post.title, i); break; } } } } } }