【发布时间】:2012-11-18 23:28:25
【问题描述】:
我正在将文件上传到 Amazon s3 存储桶,并且可以访问 InputStream 和包含文件 MIME 类型但不包含原始文件名的字符串。在将文件推送到 S3 之前,由我实际创建文件名和扩展名。是否有库或方便的方法来确定从 MIME 类型中使用的适当扩展名?
我看到了一些对 Apache Tika 库的引用,但这似乎有点过头了,我还不能让它成功检测文件扩展名。从我收集到的信息看来,这段代码应该可以工作,但是当我的类型变量是“image/jpeg”时,我得到的只是一个空字符串
MimeType mimeType = null;
try {
mimeType = new MimeTypes().forName(type);
} catch (MimeTypeException e) {
Logger.error("Couldn't Detect Mime Type for type: " + type, e);
}
if (mimeType != null) {
String extension = mimeType.getExtension();
//do something with the extension
}
【问题讨论】:
-
您确定需要设置文件扩展名吗?如果您知道 MIME 类型,则可以使用正确的
Content-Type将其上传到 S3,并且扩展名(通常)变得无关紧要。 -
你说得对,我刚刚检查过,在我的情况下,在 ObjectMetadata 中为 S3 设置 Content-Type 就可以解决问题。我还是想知道这个问题的答案,看来以后可以派上用场了。
-
很公平。 MIME 类型与文件扩展名之间没有一个 True Mapping™ —— 有些类型有多个扩展名,有些扩展名有多种类型 - 所以当我使用可以独立保存的数据存储时,我会尝试只存储我知道的内容并避免猜测。
标签: java amazon-s3 apache-tika