gpt4 book ai didi

java - 在 Java 中检测 MySQL BLOB 的 mime 类型

转载 作者:可可西里 更新时间:2023-11-01 07:05:39 32 4
gpt4 key购买 nike

是的,我知道我们不应将图像存储在数据库中,谢谢。

也就是说,有没有办法在 java 中检测存储在 mysql 中的 BLOB 的 mime 类型?

它仅适用于图像(.gif、.png、.jpeg 等)我不需要通用工具。

非常感谢各位

Bonus points if the proposed solution does not involve 3rd party libs :)

最佳答案

我想您可以看一下标题。您需要将数据读入字节数组,然后检查字节以查看它们是否与不同文件类型的 header 匹配。

例如,对于 GIF,前三个字节是“GIF”(4716 4916 4616)后跟"87a"(3816 3716 6116) 或 "89a"(3816 39 16 6116).

所以这样的事情应该可行(使用 FileInputStream 用于演示目的,但您可以使用 ResultSet#getBinaryStream(int)ResultSet#getBinaryStream(String) 从 BLOB 获取二进制数据):

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class IdentifyImage {
public static void main(String[] args) throws IOException {
FileInputStream in = null;

try {
in = new FileInputStream("sample.gif");

//The following are in base 10
byte[] gifHeader87a = {71, 73, 70, 56, 55, 97};
byte[] gifHeader89a = {71, 73, 70, 56, 57, 97};

byte[] bytes = new byte[6];
in.read(bytes, 0, 6);

if(Arrays.equals(gifHeader89a, bytes) || Arrays.equals(gifHeader87a, bytes)) {
System.out.println("It's a GIF!");
}

} finally {
if (in != null) {
in.close();
}
}
}
}

对于其他文件类型(如 JPG、PNG 等),您只需在 header 中查找字节即可。不确定这是否是最好的方法。有人可能有更好的解决方案。

就第 3 方库而言,jMimeMagic很不错。这可能是最简单的解决方案:)。

编辑

我找到了 this article这里列出了不同文件类型的标题信息。有一些示例代码,但它是用另一种语言 (Clarion) 编写的。

关于java - 在 Java 中检测 MySQL BLOB 的 mime 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957754/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com