grails存储图像维度数据的位置
我有一个需要重构的照片服务。以下是当前的方法:grails存储图像维度数据的位置,grails,Grails,我有一个需要重构的照片服务。以下是当前的方法: def getPhotoUrl(String publicId, String format) { getCloudinary().url().format(format).transformation(new Transformation().width(288).height(194).crop("fill")).generate(publicId) } def getGalleryThumbnailUrl(String public
def getPhotoUrl(String publicId, String format) {
getCloudinary().url().format(format).transformation(new Transformation().width(288).height(194).crop("fill")).generate(publicId)
}
def getGalleryThumbnailUrl(String publicId) {
getCloudinary().url().format('jpg').transformation(new Transformation().width(205).height(205).crop("fill")).generate(publicId)
}
def getGalleryPhotoUrl(String publicId) {
getCloudinary().url().format('jpg').transformation(new Transformation().width(950).height(950).crop("fill")).generate(publicId)
}
照片服务方法都是从taglib调用的
除了图像维度外,这些方法非常相似,我还需要添加一些不同维度的方法。虽然我可以重构一个方法来获取图像维度,但您会在哪里定义/传递这些维度
-将维度放入硬编码的标记库中,并将其传递到服务调用中。-将维度放在Config.groovy中,并使用 服务从配置中加载它们
-把尺寸放进去 Config.groovy,并让taglib加载/传递它们到服务
-只需在服务中对其进行硬编码即可 尺寸几乎不会改变 编辑:::修订代码
public enum PhotoSize {
GALLERY(grailsApplication.config.img.gallery.full.height, grailsApplication.config.img.gallery.full.width),
//def config = Holders.config
def grailsApplication
final int height
final int width
PhotoSize(int height, int width) {
this.height = height
this.width = width
}
public int getHeight() {
height
}
public int getWidth() {
width
}
}
存储图像大小的另一种方法是使用
enum
如下:
enum ImgSizeEnum {
THUMBNAIL(100, 100),
LARGE(200, 200)
private final int height
private final int width
ImgSizeEnum(int height, int width) {
this.height = height
this.width = width
}
public int getHeight() { return height }
public int getWidth() { return width }
}
然后在标记库中可以有一个参数,将枚举
表示为字符串
(以获取其大小):
在本例中,我在枚举中硬编码了大小,但您也可以将这些值存储在Config.groovy
中
编辑:
要从Config.groovy
获取高度/宽度,请在文件中按如下方式添加每个值:
img.thumbnail.height=100
img.thumbnail.width=100
或者使用以下语法:
img{
thumbnail{
height=100
width=100
}
}
然后在enum类中注入grailsApplication
服务:
def grailsApplication
并从配置文件中读取属性以初始化每个枚举:
enum ImgSizeEnum {
THUMBNAIL(grailsApplication.config.img.thumbnail.height, grailsApplication.config.img.thumbnail.width),
...
}
这是一个很好的解决方案。现在,我如何将Config.groovy中的值放入enum声明:LARGE(myConfig.photo.height,myConfig.photo.width)?我已经添加了一个示例,说明如何从配置文件中获取这些值。Hmmm,我已经花了一个小时的时间来获取枚举以加载GrailApp。错误:在静态范围中找到明显的变量“grailsApplication”,但未引用局部变量、静态字段或类。可能原因:您试图引用绑定中的变量或静态上下文中的实例变量。您拼错了类名或静态导入的字段。请检查拼写。您试图使用方法“grailsApplication”,但在语法不允许的地方漏掉了括号。我正在编辑我的帖子,以包括整个班级。没关系,我认为这是一个不同的问题。它现在似乎起作用了。
enum ImgSizeEnum {
THUMBNAIL(grailsApplication.config.img.thumbnail.height, grailsApplication.config.img.thumbnail.width),
...
}