Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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中的MIME类型确定适当的文件扩展名_Java_Amazon S3_Apache Tika - Fatal编程技术网

如何从Java中的MIME类型确定适当的文件扩展名

如何从Java中的MIME类型确定适当的文件扩展名,java,amazon-s3,apache-tika,Java,Amazon S3,Apache Tika,我正在将文件上载到AmazonS3存储桶中,并且可以访问InputStream和一个包含文件MIME类型但不包含原始文件名的字符串。在将文件升级到S3之前,由我来实际创建文件名和扩展名。是否有库或方便的方法来确定从MIME类型使用的适当扩展 我看过一些对ApacheTika库的引用,但这似乎有些过分,我还没能让它成功地检测到文件扩展名。从我收集到的信息来看,这段代码应该可以工作,但当我的类型变量为“image/jpeg”时,我得到的只是一个空字符串 正如一些评论者所指出的,mimetype和文件

我正在将文件上载到AmazonS3存储桶中,并且可以访问InputStream和一个包含文件MIME类型但不包含原始文件名的字符串。在将文件升级到S3之前,由我来实际创建文件名和扩展名。是否有库或方便的方法来确定从MIME类型使用的适当扩展

我看过一些对ApacheTika库的引用,但这似乎有些过分,我还没能让它成功地检测到文件扩展名。从我收集到的信息来看,这段代码应该可以工作,但当我的类型变量为“image/jpeg”时,我得到的只是一个空字符串


正如一些评论者所指出的,mimetype和文件扩展名之间没有通用的1:1映射。。。有些mimetype有多个可能的扩展,许多扩展由多个mimetype共享,有些mimetype没有扩展

如果可能的话,最好存储mimetype并继续使用它,然后忘记扩展

也就是说,如果您确实希望获得给定mimetype的最常见的文件扩展名,那么Tika是一个很好的方法。有一个非常大的mime类型集,它知道,而且对于其中的许多类型,它还知道mime魔术的检测、通用扩展、描述等

如果要获取JPEG文件最常用的扩展名,则如中所示,只需执行以下操作:

  MimeTypes allTypes = MimeTypes.getDefaultMimeTypes();
  MimeType jpeg = allTypes.forName("image/jpeg");
  String jpegExt = jpeg.getExtension(); // .jpg
  assertEquals(".jpg", jpeg.getExtension());
关键是,您需要加载捆绑在Tika jar中的xml文件,以获得所有MIMEType的定义。如果您可能也在处理自定义mimetype,那么Tika支持这些类型,并将第1行更改为:

  TikaConfig config = TikaConfig.getDefaultConfig();
  MimeTypes allTypes = config.getMimeRepository();

通过使用TikaConfig方法获取mimetype,Tika还将检查类路径中的自定义mimetype定义,并包括这些定义。

您确定需要设置文件扩展名吗?如果您知道MIME类型,您可以使用适当的
内容类型将其上载到S3,扩展(通常)就变得不相关了。您是对的,我刚刚检查了,在ObjectMetadata中为S3设置内容类型在我的例子中就是这样。我仍然想知道这个问题的答案,似乎它在将来会派上用场。这很公平。没有一个真正的映射™ 将MIME类型转换为文件扩展名--有些类型有多个扩展名,有些扩展名有多个类型--因此,当我使用一个既可以独立保存又可以独立保存的数据存储时,我会尝试只存储我知道的内容,避免猜测。
  TikaConfig config = TikaConfig.getDefaultConfig();
  MimeTypes allTypes = config.getMimeRepository();