如何从 SQL Server 文件表中的二进制数据中获取文件类型?

Posted

技术标签:

【中文标题】如何从 SQL Server 文件表中的二进制数据中获取文件类型?【英文标题】:How to get file type from binary data in SQL Server File table? 【发布时间】:2019-11-13 01:02:31 【问题描述】:

我想从 FileTable 中 File_Stream 列的二进制数据中获取文件类型。

FileTable中有File_Type列,但不可靠。

注意以下查询:

这些文件是一样的!

【问题讨论】:

将您的信息作为测试发布在您的帖子中,而不是指向图片的链接。如果 File_Type 不可靠,那么您存储文件的方式就有问题。上传文件时,应使用正确的文件类型或扩展名进行保存。简而言之,您无法从纯字节数组(***.com/questions/1654846/…)中确定文件的类型 没有 100% 万无一失的方法可以做到这一点。例如,html 和纯文本等类型没有允许您检测文件类型的标记。您正在寻找 Unix file(1) 实用程序的道德等价物,这在某种程度上是可能的,但在 SQL Server 中没有本机实现(并且设置具有此功能的 CLR 程序集,虽然可能,但工作量很大)。 如果文件名中的文件扩展名错误,“文件类型”列也是如此。文件类型由文件名上的 last 扩展名决定。因此,您的文件流会将名为MyFile.txt.csv.xlsx.bin 的文件视为bin 文件。这也适用于您的操作系统。 Windows 和 Linux 都会将同一文件识别为 bin 文件 【参考方案1】:

file_type 列值源自文件名,而不是文件的二进制内容。 SQL Server 不知道实际的二进制内容代表什么。

【讨论】:

以上是关于如何从 SQL Server 文件表中的二进制数据中获取文件类型?的主要内容,如果未能解决你的问题,请参考以下文章

帮助从 SQL Server 读取二进制图像数据到 PHP

如何从 SQL Server 中的表中获取不匹配的数据

如何从 SQL Server 2005 中另一个表中的相应数据更新一个表中的数据

如何将文本文件中的数据从Java插入SQL Server?

如何从 SQL Server 中包含多行数据的 2 个表中选择 4 个不同的值?

如何将excel表中的数据导入到sql server表中?