有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中检测MySQL BLOB的mimetype

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

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

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

谢谢大家

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


共 (1) 个答案

  1. # 1 楼答案

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

    例如,对于GIF,前三个字节是“GIF”(471649164616),后跟“87a”(381637166116)或“89a”(381639166116

    所以类似的方法应该是可行的(使用FileInputStream进行演示,但是可以使用^{}^{}从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相当不错。这可能是最简单的解决方案:)

    编辑

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