微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Java 中:如何使用 mime_type 'application/octet-stream' 从二进制数据BYTEA中的文件中识别文件扩展名/文件类型并保存到磁盘?

如何解决在 Java 中:如何使用 mime_type 'application/octet-stream' 从二进制数据BYTEA中的文件中识别文件扩展名/文件类型并保存到磁盘?

数据库迁移中,我们在 postgresql 数据库中有一个数据转储。 任务是用 java 或 groovy 编写脚本,以便以正确的格式读出文件并将它们保存到服务器。对于某些文件,在“mime_type”列中指定了 mime_type(例如 application/pdf、image/png)。在这些情况下,我能够以正确的格式保存它们。 (-> 将它们作为字节数组输入流读入,并以相应格式保存为文件)。

但是 90% 的文件都有 mime_type "application/octet-stream"。在这些情况下,我怀疑文件的类型或格式只是未知的。为了能够以正确的格式(例如 png 的 pdf)保存它们,我需要以某种方式找出文件的类型。然后相应地转换它们。

我已经尝试过 URLConnection.guessContentTypeFromStream(inputStream) 方法,但这不能识别 mime_type。

        GroovyRowResult[] fileInBinary = sql.rows("""
        SELECT * FROM table_name WHERE id = 123456
        """)


        def temp = []

        fileInBinary.each { GroovyRowResult row ->
        temp << row.data
        }

        InputStream byteArrayInputStream = new ByteArrayInputStream((byte[]) temp.flatten(),temp.flatten().size())

        def mimeType = java.net.URLConnection.guessContentTypeFromStream(byteArrayInputStream)
        println "guessed mime Type is: " + mimeType

..followed by code to save the file,which works when mime_type specifies file format,e.g. pdf,word,or png

代码有效,但 guessContentType-Part 除外。

文件以二进制数据格式保存(BYTEA,postgres等价于BLOB)。

有谁知道如何找出这些应用程序/八位字节流文件最初采用的格式,从数据库中的二进制数据列(BYTEA格式)中提取它们并将文件保存/读取到磁盘,例如pdf、docx 还是 png?

非常感谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。