有关如何自定义媒体URL生成的问题

2020-09-22 00:22发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好,

我正在尝试将CDN用于媒体项目。 目的是自定义媒体项的URL字段的生成。 我知道我必须使用MediaURLStrategy来实现这一点,但不幸的是,它不起作用。

这就是我所做的:

  • 在我的自定义网址策略中实现了MediaURLStrategy接口

  • 在local.properties中配置了媒体文件夹以使用此自定义url策略

  • 当我在后台打开媒体项目时,将调用自定义网址策略

  • 不幸的是,仅通过策略设置了downloadURL。 媒体项目的网址保持空白。

现在我的问题是:如何确保自定义策略为给定文件夹中的媒体项目分配了正确的URL?

我没有创建自定义MediaStorageStrategy,因为我不明白为什么需要这样一个。

提前谢谢!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好,

我正在尝试将CDN用于媒体项目。 目的是自定义媒体项的URL字段的生成。 我知道我必须使用MediaURLStrategy来实现这一点,但不幸的是,它不起作用。

这就是我所做的:

  • 在我的自定义网址策略中实现了MediaURLStrategy接口

  • 在local.properties中配置了媒体文件夹以使用此自定义url策略

  • 当我在后台打开媒体项目时,将调用自定义网址策略

  • 不幸的是,仅通过策略设置了downloadURL。 媒体项目的网址保持空白。

现在我的问题是:如何确保自定义策略为给定文件夹中的媒体项目分配了正确的URL?

我没有创建自定义MediaStorageStrategy,因为我不明白为什么需要这样一个。

提前谢谢!

付费偷看设置
发送
11条回答
SAP小黑
1楼 · 2020-09-22 00:35.采纳回答

最终,我发现HMC和Backoffice似乎直接使用媒体项的internalUrl字段。 但是,店面可以正确使用给定配置的策略。 对于后台办公室/hmc问题,我的解决方法包括将媒体项目的internalUrl字段设置为实际的url,从而使图像在那里可见。

宇峰科技
2楼-- · 2020-09-22 00:30

我对混合动力还很陌生,不确定它是否满足我的要求。 我期待在产品座舱中创建一个自定义字段。 该字段是一个URL,我不想保留它。 我只想渲染图像。 所以,我创建了一个新项目

  
                          这是Scene7服务器URL 
                          
                          <修饰符read =" true" write =" false"可选=" true" unique =" false"/>
                      


  

我创建了一个DynamicAttributeHandler,它返回一个MediaModel,并将所有URL类字段设置为我想要的那个

此外,在editorArea_Product.xml中添加了 ,但未显示任何内容。 媒体网址策略适合哪里?

宇峰
3楼-- · 2020-09-22 00:39

嗨,

媒体存储策略和媒体URL策略是两个不同的东西。
MediaStorageStrategy:对媒体数据流执行操作,例如存储,读取和删除。
MediaURLStrategy:呈现公共Web URL。

如果要设置自定义媒体URL策略,则必须:

  • 实现MediaURLStrategy并重写getUrlFormMedia方法。

  • 在* -spring.xml文件中定义创建的Media Url策略的bean。

  • 在local.properties中配置媒体文件夹文件夹:

media.folder.YourMediaFolderQualifierName.url.strategy = yourCustomMediaWebUrlStrategy

  • 更改媒体文件夹,例如 来自HMC-> Multimedia-> Media


如果保存后一切设置正确,您可以在以下位置查看网址:

  • "常规"标签=>属性=> URL

  • 元数据选项卡=>元数据=>下载URL

  • 管理选项卡=>未绑定=> URL

  • 在店面页面上,通过检查媒体URL地址(不要忘记清除浏览器的缓存文件)

致谢,
Artur

hongfeng1314
4楼-- · 2020-09-22 00:31

再次感谢,我将请求的信息添加为另一个答复。

SKY徐
5楼-- · 2020-09-22 00:28

这是我的MediaUrlStrategy。

 软件包de.censored.core.cdn;
 
  导入de.hybris.platform.media.MediaSource;
  导入de.hybris.platform.media.storage.MediaStorageConfigService.MediaFolderConfig;
  导入de.hybris.platform.media.url.MediaURLStrategy;
 
  导入java.util.Objects;
 
  导入org.apache.log4j.Logger;
 
  公共类CloudinaryMediaURLStrategy实现MediaURLStrategy {
      私有静态最终字符串CONFIG_URL_TEMPLATE_KEY =" url.template";
 
      私有静态最终字符串DEFAULT_URL_TEMPLATE =" http://localhost/media/%% asset-id %%";
 
      私有静态最终字符串ASSET_ID =" %% asset-id %%";
 
      私有静态最终Logger LOG = Logger.getLogger(CloudinaryMediaURLStrategy.class);
 
      @Override
      public String getUrlForMedia(最终MediaFolderConfig paramMediaFolderConfig,最终MediaSource媒体){
          Objects.requireNonNull(media,"媒体为空。");
 
          返回getUrlInternal(paramMediaFolderConfig,media);
      }
 
      私有字符串getUrlInternal(最终MediaFolderConfig paramMediaFolderConfig,最终MediaSource mediaSource){
          最终的字符串assetId = mediaSource.getLocation();
 
          Objects.requireNonNull(assetId," AssetId为null");
 
          返回getUrlPattern(paramMediaFolderConfig).replace(ASSET_ID,assetId);
      }
 
      私有字符串getUrlPattern(final MediaFolderConfig配置){
          返回config.getParameter(CONFIG_URL_TEMPLATE_KEY,String.class,DEFAULT_URL_TEMPLATE);
      }
 
  }
 
  
野沐沐
6楼-- · 2020-09-22 00:46

在下面查看我的回复。

SAP小黑
7楼-- · 2020-09-22 00:42

这是我相关的local.properties内容:

  media.folder.cdn_folder.url.strategy = cloudinaryMediaURLStrategy
  media.folder.cdn_folder.url.template = http://res.cloudinary.com/censored/image/upload/%%asset-id%%.jpg

  

这是我的bean定义:

  

  

我正在从xml导入创建媒体项,首先使用modelService.create创建MediaModel,然后设置为其配置策略的文件夹以及媒体模型的location属性。 然后保存:

 最终MediaModel媒体= getModelService()。create(MediaModel.class);
                  media.setLocation(asset.getCode())
          media.setMediaFormat(mediaFormat);
          media.setFolder(censoredImportService.getMediaService()。getFolder(ASSET_CDN_FOLDER_ID));
          media.setCode(mediaCode);
          media.setCatalogVersion(getTargetCatalogVersion());
                  modelService.save(media);
  

一周热门 更多>