gpt4 book ai didi

java - 使用 Content-Type header 从 eml 文件中提取附件名称

转载 作者:行者123 更新时间:2023-12-01 19:56:53 25 4
gpt4 key购买 nike

我正在使用 Tika-server 来解析一堆 eml 文件。使用 /rmeta 端点时,提取 emls 和附件的内容和元数据工作正常。

附件文件名正确时出现问题。当原始 eml 文件中的附件部分具有以下结构时:

Content-Type: application/pdf; name="filename_a.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="filename_a.pdf"

一切正常:元数据对象中提取的文件名路径(在 API 响应中)是:

"X-TIKA:embedded_resource_path": "/filename_a.pdf"

但是,我的一些电子邮件的 header 结构格式错误(内容处置中缺少文件名),即:

Content-Type: application/pdf; name="filename_a.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;

然后在解析整个 eml 后我得到:

"X-TIKA:embedded_resource_path": "/embedded-1"

我在 Tika 的源代码中检查了文件名元在 \org\apache\tika\parser\RecursiveParserWrapper.class 中定义:

 private String getResourceName(Metadata metadata, RecursiveParserWrapper.ParserState state) {
String objectName = "";
if (metadata.get("resourceName") != null) {
objectName = metadata.get("resourceName");
} else if (metadata.get("embeddedRelationshipId") != null) {
objectName = metadata.get("embeddedRelationshipId");
} else {
objectName = "embedded-" + ++state.unknownCount;
}

objectName = FilenameUtils.getName(objectName);
return objectName;
}

我试图通过检查元数据对象中的 Content-Type 键来访问以某种方式提到的文件名属性,但它不存在。 (我假设 Tika 评估内容类型 key 不仅仅是通过查看正确的 header ,因此缺少所需的文件名)

因此我的问题(因为我无法弄清楚)是否有一种方法可以修改 Tika 源代码,以在 Content-Disposition header 中缺少正确的文件名属性时强制从 Content-Type header 中提取文件名?

最佳答案

好吧,所以我自己解决了。解决方法非常简单明了。

必须扩展 \org\apache\tika\parser\mail\MailContentHandler.class 中的条件之一。在第 129 行我们有:

if (contentDispositionFileName != null) {
submd.set("resourceName", contentDispositionFileName);
}

通过使用附加的 else block 进行扩展:

if (contentDispositionFileName != null) {
submd.set("resourceName", contentDispositionFileName);
} else {
Map<String, String> contentTypeParameters = ((MaximalBodyDescriptor)body).getContentTypeParameters();
String contentTypeFilename = (String)contentTypeParameters.get("name");
submd.set("resourceName", contentTypeFilename);
}

我们强制处理程序在内容类型参数中查找附加文件名属性。

关于java - 使用 Content-Type header 从 eml 文件中提取附件名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59033808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com