Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取p7s文件的mime类型?_Java_File_Mime Types - Fatal编程技术网

Java 如何获取p7s文件的mime类型?

Java 如何获取p7s文件的mime类型?,java,file,mime-types,Java,File,Mime Types,获取文件mime类型的可能方法之一是: File myFile = File("myDocument.pdf"); Path path = file.toPath(); String mimeType = Files.probeContentType(path); 它返回application/pdf。一切都是正确的。 但是这种方法不适用于*.p7s文件。它返回null,而不是预期的application/pkcs7 mime 也许有人知道问题出在哪里,解决方案是什么?Java的FileTyp

获取文件mime类型的可能方法之一是:

File myFile = File("myDocument.pdf");
Path path = file.toPath();
String mimeType = Files.probeContentType(path);
它返回
application/pdf
。一切都是正确的。 但是这种方法不适用于
*.p7s
文件。它返回
null
,而不是预期的
application/pkcs7 mime


也许有人知道问题出在哪里,解决方案是什么?

Java的FileTypeDetector不支持即时检测p7s文件格式。因此,除非有一些文件类型检测库支持p7s格式,否则您就只能靠自己了

SMIME标准将p7s扩展名定义为中用于PKCS-7加密签名的文件扩展名。它的mime内容类型实际上是
应用程序/pkcs7签名
。不知道如何处理这些签名的电子邮件客户端允许用户将其作为文件下载

PKCS-7语法在中使用进行了描述。PKCS-7签名是使用。一旦您理解了这一点,实际上验证p7s文件是否确实是pkcs7签名类型并不难

为了验证p7s文件是pk7s签名,您可以使用ASN.1 Java解析器来解析该文件。然后,您只需声明ASN.1序列开头的对象标识符的类型为
pkcs7 signedData
(有关此对象标识符的定义,请参阅的第14章)。这种检测方法不能证明p7s文件实际上是PKCS-7签名,但可能性极高

OpenSSL有一个内置的ASN1解析器。您可以使用它手动应用上述检测方法:

$ openssl asn1parse -inform DER -in smime.p7s -dump -i
    0:d=0  hl=4 l= 490 cons: SEQUENCE
    4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-signedData
                                                 ^^^^^^^^^^^^^^^^                                                                                       
                                                that's what I am talking about

希望这有帮助。祝你好运

我发现最好的方法就是使用

有关更多详细信息,请参阅


谢谢你,罗宾

您正在使用的
FileTypeDetector
实现无法确定文件的MIME类型。我相信默认的
FileTypeDetector
是特定于平台的。遇到此问题时,您正在哪个操作系统上运行代码?另请参阅我正在使用Windows 8.1。在您的链接中,我找到了ApacheTika,它准确地确定了mime类型(也是p7s)。谢谢你,罗宾!