【问题标题】:Encode base64 in Freemarker template在 Freemarker 模板中编码 base64
【发布时间】:2012-11-25 03:35:52
【问题描述】:

有没有办法在 Freemarker 模板中将字节数组转换为 base64?比如:

<img src="data:image/jpeg;base64,${photo.data?base64}" />

谢谢。

【问题讨论】:

    标签: java base64 freemarker


    【解决方案1】:

    当前版本中没有内置方法。 (当然你也可以调用你自己的方法来做。)

    您要调用其方法的对象必须放入数据模型(即模板上下文)中。 (静态:freemarker.org/docs/pgui_misc_beanwrapper.html#autoid_55

    但是,为了便于维护,我更喜欢这样:创建类com.foo.Base64EncoderMethod implements TemplateMethodModelEx(在内部调用Base64.encodeBase64),然后创建一个模板lib/utils.ftl(如果你还没有类似的东西),然后,致电&lt;#assign base64Encode = 'com.foo.Base64EncoderMethod'?new()&gt;。然后在模板中调用&lt;#import '/lib/utils.ftl' as u&gt;${u.base64Encode(photo.data)}

    【讨论】:

    • 你是怎么做到的?我在我的应用程序中使用 commons-codec 进行 base64 编码。函数为:Base64.encodeBase64(byte[])
    • 您要调用其方法的对象必须放入数据模型(=模板上下文)中。 (对于静态:freemarker.org/docs/pgui_misc_beanwrapper.html#autoid_55)但是,为了更容易维护,我更喜欢这样:创建class com.foo.Base64EncoderMethod implements TemplateMethodModelEx(在内部调用Base64.encodeBase64),然后创建一个模板lib/utils.ftl(如果你还没有类似的东西) ,在 &lt;#assign base64Encode = 'com.foo.Base64EncoderMethod'?new()&gt; 中,然后在模板中 &lt;#import '/lib/utils.ftl' as u&gt;${base64Encode(photo.data)}
    • 创建一个TemplateMethodModelEx 实现很麻烦。它将字节数组转换为包含Byte 对象的ListSimpleSequence 对象,您必须对其进行迭代才能将其转换回base64 编码器的原始byte 数组。在这种情况下,我认为我更喜欢静态模型技术。
    • byte[] 转换的事情确实很可怕。但我相信这是DefaultObjectWrapper 特有的问题。我一直使用纯BeansWrapper(或自定义扩展)作为全局object_wrapper 设置。然后我可以取回有意义的原始对象。但是在现有应用程序中切换包装器并不容易,因为它可能会破坏现有模板。顺便说一句,静态的东西也使用BeansWrapper
    • 实际上,我最终做的是创建一个普通的Base64Generator 类,它不扩展任何东西并且有一个encode(byte[]) 方法。我刚刚创建了这个类的一个实例并将其传递给数据模型。似乎工作正常。
    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2015-11-06
    • 2013-03-18
    • 2017-09-15
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多