![](/img/trans.png)
[英]is there a way to generate a Content-Type header from a file extension in Java?
[英]Extracting attachment name from eml file using Content-Type header
我正在使用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"
但是我的一些电子邮件的标头结构格式错误(Content-Disposition中缺少文件名),即:
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键来以某种方式访问提到的filename属性,但是它不存在。 (我认为Tika不仅通过查看适当的标头来评估Content-type密钥,因此缺少所需的文件名)
因此,我的问题(由于我无法弄清楚)是否有一种方法可以修改Tika源代码,以在缺少Content-Disposition标头中的正确文件名属性时从Content-Type标头中强制提取文件名?
好吧,所以我自己做。 解决方法非常简单明了。
必须扩展\\ org \\ apache \\ tika \\ parser \\ mail \\ MailContentHandler.class中的条件之一 。 在第129行,我们有:
if (contentDispositionFileName != null) {
submd.set("resourceName", contentDispositionFileName);
}
通过扩展其他else块:
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);
}
我们强制处理程序在内容类型参数中寻找其他文件名属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.