检测Java中MySQL BLOB的mime类型

| 是的,我知道我们不应该将图像存储在数据库中,谢谢。 也就是说,有没有办法在Java中检测存储在mysql中的BLOB的mime类型? 它仅用于图像(.gif,.png,.jpeg等),我不需要通用工具。 非常感谢   如果建议加分   解决方案不涉及第三方   库:)     
已邀请:
我想您可以看看标题。您需要将数据读入字节数组,然后检查字节以查看它们是否与不同文件类型的标头匹配。 例如,对于GIF,前三个字节是\“ GIF \”(4716 4916 4616),后跟\“ 87a \”(3816 3716 6116)或\“ 89a \”(3816 3916 6116)。 因此,这样的事情应该起作用(使用ѭ0进行演示,但是可以使用
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等)中的字节。不知道这是否是最好的方法。有人可能有更好的解决方案。 就第三方库而言,jMimeMagic相当不错。这可能是最简单的解决方案:)。 编辑 我在这里找到了这篇文章,其中列出了不同文件类型的标题信息。有一些示例代码,但是它是用另一种语言(号角)编写的。     
老实说,如果您记得可以始终采用缓存策略来避免某些问题,那么将图像存储在数据库中是可以的。而且现代计算机往往能够处理大多数情况下的负载。无论如何,存储Blob时要记住的关键一件事就是将mimetype随它一起存储,因为那样一来它就很容易变得神圣。     
我认为将二进制文件存储在数据库中不是一个好主意,因为如果它长大了,它可能会很慢。 即使您想这样做,我认为在存储二进制文件时最好存储mime类型。     

要回复问题请先登录注册