我正在寻找一种简单的方法来获取文件扩展名不正确或没有给出的mime类型,类似于.Net中的这个问题.
在Web项目中,用户上传他们的文件,但是当我在服务器上收到它们时,它们被存储为.tmp文件而不是原始文件扩展名(这也是我的首选行为).
但是,这会导致问题Files.probeContentType().虽然本地对我来说,在我的Linux开发机器上,Files.probeContentType()正常工作并确定正确的mime类型,当我将项目上传到生产服务器(amazon beanstalk)时,它似乎无法正确确定mime类型.
从阅读javadocs来看,似乎执行的Files.probeContentType()是不同的,我认为在生产服务器上,它正在读取文件扩展名等,因此无法确定内容类型.
什么是好的,快速的替代方案Files.probeContentType()将接受一个File参数并返回一个字符串,如image/png生成的mime类型?
我有一个可用于上传文件的网页.
现在我需要检查文件类型是否正确(zip,jpg,pdf,...).
我可以使用请求附带的mimeType,但我不信任用户,让我们说我想确保没有人能够上传以.jpg重命名的.gif文件
我认为在这种情况下我应该检查神奇的数字.
这是一个我发现的java库,似乎实现了我需要的'从幻数中提取mimetype'.
这是一个正确的解决方案还是你的建议?
更新:
我找到了mime-util项目,它似乎非常好并且是最新的!(也许比Java Mime Magic Library更好?)
这是一个可以帮助你提取mime类型的实用程序项目列表
简单的问题:如何在InputStream不保存文件的情况下获取用户上传到我的servlet的文件的MIME类型(或内容类型)?
我试过这些方法来查找文件的MIME类型......
Path source = Paths
.get("C://Users/akash/Desktop/FW Internal release of MSTClient-Server5.02.04_24.msg");
System.out.println(Files.probeContentType(source));
Run Code Online (Sandbox Code Playgroud)
上面的代码返回 null...
如果我使用Apache的TIKA API来获取MIME类型,那么它将它作为text/plain ...
但我希望结果如此 application/vnd.ms-outlook
UPDATE
我也使用MIME-Util.jar如下代码...
MimeUtil2 mimeUtil = new MimeUtil2();
mimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
RandomAccessFile file1 = new RandomAccessFile(
"C://Users/akash/Desktop/FW Internal release of MSTClient-Server5.02.04_24.msg",
"r");
System.out.println(file1.length());
byte[] file = new byte[624128];
file1.read(file, 0, 624128);
String mimeType = MimeUtil2.getMostSpecificMimeType(mimeUtil.getMimeTypes(file)).toString();
Run Code Online (Sandbox Code Playgroud)
这给了我输出 application/msword
更新:
Tika API超出了范围,因为它太大而无法包含在项目中......
那么如何找到MIME类型?
好奇Java中获取mime类型文件的最佳方式.它应该实际检查文件,因为文件名不是一个准确的指标.
目前我正在使用以下似乎非常受欢迎或错过
is = new BufferedInputStream(new FileInputStream(fileName));
String mimeType = URLConnection.guessContentTypeFromStream(is);
if(mimeType == null) {
throw new IOException("can't get mime type of image");
}
Run Code Online (Sandbox Code Playgroud) 我在数据库中有字节数组.
如何从java中的字节数组中提取文件扩展名(mime/type)?
我正在搜索一个java库,它通过查看文件内容(字节数组)告诉你mime类型.我发现这个项目使用jmimemagic,它不再支持更新的文件类型(例如MS word docx格式),因为它现在处于非活动状态(从2006年开始).
我得到一个文件,它是Base64编码的字符串作为图像。但我认为它的内容包含有关 png、jpeg 等文件类型的信息。我该如何检测?有什么图书馆可以帮助我吗?
如何从byte[](Blob)获取文件类型扩展名.我正在从DB读取文件,byte[]但我不知道如何自动检测文件扩展名.
Blob blob = rs.getBlob(1);
byte[] bdata = blob.getBytes(1, (int) blob.length());
Run Code Online (Sandbox Code Playgroud)