如何从Akeneo 5中获取指定产品关联的媒体资源及对应下载链接
解决方法
你当前的问题核心是混淆了资产编码和媒体文件编码,且调用了不匹配的API接口,按照以下步骤修改即可:
- 你从产品属性中拿到的
1234_00是资产管理模块中的资产编码,并非媒体文件本身的编码,需要先调用资产API查询资产详情,提取关联的媒体文件编码 - 无需全量拉取媒体文件列表,拿到对应媒体文件编码后直接调用下载接口即可
修正后的代码示例
$searchBuilder = new \Akeneo\Pim\ApiClient\Search\SearchBuilder(); $searchBuilder->addFilter('enabled', '=', true); $searchFilters = $searchBuilder->getFilters(); $products = $client->getProductApi()->all(100, ['search' => $searchFilters]); foreach ($products as $product) { // 先判断产品是否有assets属性值,避免报错 if (!isset($product['values']['assets'])) continue; foreach($product['values']['assets'] as $assetData) { foreach($assetData['data'] as $assetCode) { // 第一步:通过资产编码获取资产详情,第一个参数替换为你自己的资产家族代码 $assetInfo = $client->getAssetManagerApi()->get('你的资产家族代码', $assetCode); // 提取资产关联的媒体文件编码,默认存储在media属性中,可根据你自己的资产家族字段调整 $mediaFileCode = $assetInfo['values']['media'][0]['data']; // 第二步:下载媒体文件,返回的是文件流 $fileStream = $client->getAssetMediaFileApi()->download($mediaFileCode); // 保存到本地示例 file_put_contents('/本地保存路径/'.$mediaFileCode, $fileStream); // 如果只需要获取下载链接,直接按规则拼接即可:你的Akeneo域名 + /asset/media-file/{$mediaFileCode}/download } } }
注意事项
- 代码中的
你的资产家族代码需要替换为你自己系统里存储产品媒体的资产家族标识,可在Akeneo后台资产管理模块查看 - 如果资产家族中存储媒体的属性不是
media,需要替换为你实际配置的属性编码 - 如果需要获取公开可访问的下载链接,确保你的Akeneo配置了媒体文件的公开访问权限,或者通过API生成临时访问链接
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

