Alfresco自定义元数据提取器

Alfresco自定义元数据提取器,alfresco,Alfresco,我开发了一个自定义元数据提取器,用于提取音频和视频文件的详细元数据。提取器扩展了AbstractMappingMetadataExtractor,它需要将提取的字段映射到自定义类型。提取器类名为AudioMetadataExtractor,相应的属性文件包含映射。下面是该类的代码 public class AudioMetadataExtractor extends AbstractBaseMetadataExtractor { public static ArrayList<Strin

我开发了一个自定义元数据提取器,用于提取音频和视频文件的详细元数据。提取器扩展了AbstractMappingMetadataExtractor,它需要将提取的字段映射到自定义类型。提取器类名为AudioMetadataExtractor,相应的属性文件包含映射。下面是该类的代码

public class AudioMetadataExtractor extends AbstractBaseMetadataExtractor {

public static ArrayList<String> SUPPORTED_MIMETYPES = addMimeTypes(new String[] { MimeTypes.MIMETYPE_MP3, MimeTypes.MIMETYPE_WMA });

public AudioMetadataExtractor() {
    this(SUPPORTED_MIMETYPES);
}

public AudioMetadataExtractor(ArrayList<String> supportedMimeTypes) {
    super(supportedMimeTypes);
}


@Override
protected Map<String, Serializable> extractRaw(ContentReader reader) throws Throwable {

    Map<String, Serializable> rawProperties = newRawMap();

    File file = TempFileProvider.createTempFile("DCM", "MINFO");
    reader.getContent(file);

    MediaInfoJNA mediaInfoLib = new MediaInfoJNA();
    mediaInfoLib.Open(file.getAbsolutePath());

    String album = mediaInfoLib.Get(StreamKind.General, 0, "Album", MediaInfoJNA.InfoKind.Text, MediaInfoJNA.InfoKind.Name);
    System.out.println("Album1 " + album);
    String title = mediaInfoLib.Get(StreamKind.General, 0, "Title", MediaInfoJNA.InfoKind.Text, MediaInfoJNA.InfoKind.Name);
    System.out.println("Title " + title);
    String duration = mediaInfoLib.Get(StreamKind.General, 0, "Duration", MediaInfoJNA.InfoKind.Text, MediaInfoJNA.InfoKind.Name);
    System.out.println("Duration " + duration);

    putRawValue("album", album, rawProperties);

    mediaInfoLib.Close();

    return rawProperties;
}
}
公共类AudioMetadataExtractor扩展了AbstractBaseMataExtractor{
支持的公共静态ArrayList_MIMETYPES=addMimeTypes(新字符串[]{MIMETYPES.MIMETYPE_MP3,MIMETYPES.MIMETYPE_WMA});
公共AudioMetadataExtractor(){
这(支持的类型);
}
公共AudioMetadataExtractor(ArrayList支持的类型){
super(支持的类型);
}
@凌驾
受保护的Map extractRaw(ContentReader reader)可丢弃{
Map rawProperties=newRawMap();
File File=TempFileProvider.createTempFile(“DCM”、“MINFO”);
reader.getContent(文件);
MediaInfoJNA mediaInfoLib=新的MediaInfoJNA();
Open(file.getAbsolutePath());
字符串album=mediaInfoLib.Get(StreamKind.General,0,“album”,MediaInfoJNA.InfoKind.Text,MediaInfoJNA.InfoKind.Name);
System.out.println(“相册1”+相册);
字符串title=mediaInfoLib.Get(StreamKind.General,0,“title”,MediaInfoJNA.InfoKind.Text,MediaInfoJNA.InfoKind.Name);
系统输出打印项次(“标题”+标题);
字符串duration=mediaInfoLib.Get(StreamKind.General,0,“duration”,MediaInfoJNA.InfoKind.Text,MediaInfoJNA.InfoKind.Name);
系统输出打印项次(“持续时间”+持续时间);
putRawValue(“相册”、相册、rawProperties);
mediaInfoLib.Close();
归还未经处理的财产;
}
}
提取器的配置如下所示

<bean id="metadata.extractor.AudioAsset" class="com.diipl.moviebeam.dcm.alfresco.metadata.AudioMetadataExtractor" parent="baseMetadataExtracter">
    <property name="inheritDefaultMapping">
        <value>true</value>
    </property>
</bean>

真的

问题:上载新文件时,正在调用提取器,我可以看到所有具有正确值的sysout。但是,属性中不填充任何值。但是,如果我对调用提取器的文件运行“提取公共元数据”操作,并且字段得到正确的值。

在您要上载到的空间上,是否设置了提取公共元数据的规则?否,我没有在该空间上设置规则。规则是必需的吗?Alfresco似乎在上传文件时调用了我的自定义提取器,但之后它似乎没有写入提取的属性。我想是的。但我不完全确定…你是在上传现有文件的新版本,还是一个全新的文件?(这可能会有很大的不同)很肯定这条规则是必需的。我注意到,如果您使用除共享上载/拖放以外的任何方法将文件放入存储库,则即使是内置的图像EXIF提取也不会触发该规则。