Hybris:如何在Impex中导入压缩包内的媒体文件?
解决Hybris Impex中通过类路径相对引用导入ZIP内图片的问题
问题背景
我已经能通过类路径方式成功导入非压缩图片资源:
$siteResource=jar:com.project.initialdata.constants.ProjectInitialDataConstants&/projectinitialdata/import/sampledata/images/brand INSERT_UPDATE Media ; code[unique=true] ; mediaFormat(qualifier) ; realfilename ; @media[translator=de.hybris.platform.impex.jalo.media.MediaDataTranslator] ; mime[default='image/jpeg'] ; catalogVersion(catalog(id),version)[unique=true,allownull=true] ; logo-molinard.jpg ; ; Molinard_logo.jpg ; $siteResource/8918352691230.jpg ; image/jpeg ; hybrisContentCatalog:Staged ; Logo_LittleMarcel ; ; LM_logo.jpg ; $siteResource/8918375858206.jpg ; image/jpeg ; hybrisContentCatalog:Staged
但在导入压缩包内的图片时,使用绝对路径可以正常运行:
$siteResource=zip:C:\HYBRIS_SERVER\hybris\bin\custom\project\projectinitialdata\resources\projectinitialdata\import\sampledata\images\brand INSERT_UPDATE Media ; code[unique=true] ; mediaFormat(qualifier) ; realfilename ; @media[translator=de.hybris.platform.impex.jalo.media.MediaDataTranslator] ; mime[default='image/jpeg'] ; catalogVersion(catalog(id),version)[unique=true,allownull=true] ; logo-molinard.jpg ; ; Molinard_logo.jpg ; $siteResource/images.zip&8918352691230.jpg ; image/jpeg ; hybrisContentCatalog:Staged
可使用基于类路径的相对路径配置时却无法正常工作,配置如下:
$siteResource=zip:com.project.initialdata.constants.ProjectInitialDataConstants&/projectinitialdata/import/sampledata/images/brand INSERT_UPDATE Media ; code[unique=true] ; mediaFormat(qualifier) ; realfilename ; @media[translator=de.hybris.platform.impex.jalo.media.MediaDataTranslator] ; mime[default='image/jpeg'] ; catalogVersion(catalog(id),version)[unique=true,allownull=true] ; logo-molinard.jpg ; ; Molinard_logo.jpg ; $siteResource/images.zip&8918352691230.jpg ; image/jpeg ; hybrisContentCatalog:Staged
原因分析
Hybris的zip:资源前缀在处理类路径引用时,语法逻辑和jar:前缀不一样。你当前的写法只指向了ZIP所在的目录,没有明确指定ZIP文件本身,导致系统无法识别要读取的压缩包资源。
解决方案
你需要调整$siteResource的定义,直接将类路径指向ZIP文件,再在@media字段中引用ZIP内部的图片路径,下面是几种可行的写法:
方法1:通过类常量指向ZIP文件
修改$siteResource为ZIP文件的完整类路径,格式为zip:jar:<类路径常量>&<ZIP文件的相对路径>:
$siteResource=zip:jar:com.project.initialdata.constants.ProjectInitialDataConstants&/projectinitialdata/import/sampledata/images/brand/images.zip INSERT_UPDATE Media ; code[unique=true] ; mediaFormat(qualifier) ; realfilename ; @media[translator=de.hybris.platform.impex.jalo.media.MediaDataTranslator] ; mime[default='image/jpeg'] ; catalogVersion(catalog(id),version)[unique=true,allownull=true] ; logo-molinard.jpg ; ; Molinard_logo.jpg ; $siteResource&8918352691230.jpg ; image/jpeg ; hybrisContentCatalog:Staged
方法2:简化类路径引用
如果你的模块已经在classpath中,也可以直接使用classpath:前缀简化写法,不需要依赖类常量:
$siteResource=zip:classpath:/projectinitialdata/import/sampledata/images/brand/images.zip INSERT_UPDATE Media ; code[unique=true] ; mediaFormat(qualifier) ; realfilename ; @media[translator=de.hybris.platform.impex.jalo.media.MediaDataTranslator] ; mime[default='image/jpeg'] ; catalogVersion(catalog(id),version)[unique=true,allownull=true] ; logo-molinard.jpg ; ; Molinard_logo.jpg ; $siteResource&8918352691230.jpg ; image/jpeg ; hybrisContentCatalog:Staged
关键注意点
zip:前缀必须明确指向ZIP文件,而不是文件所在的目录- 引用ZIP内部文件时,用
&分隔ZIP路径和内部文件的相对路径 - 确保ZIP文件确实存在于模块的
resources目录下,构建后能被类路径正确访问
内容的提问来源于stack exchange,提问作者Junaid
相关产品推荐
相关产品推荐

