如何从 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 和纯文本等类型没有允许您检测文件类型的标记。您正在寻找 Unixfile(1)
实用程序的道德等价物,这在某种程度上是可能的,但在 SQL Server 中没有本机实现(并且设置具有此功能的 CLR 程序集,虽然可能,但工作量很大)。
如果文件名中的文件扩展名错误,“文件类型”列也是如此。文件类型由文件名上的 last 扩展名决定。因此,您的文件流会将名为MyFile.txt.csv.xlsx.bin
的文件视为bin
文件。这也适用于您的操作系统。 Windows 和 Linux 都会将同一文件识别为 bin
文件
【参考方案1】:
file_type
列值源自文件名,而不是文件的二进制内容。 SQL Server 不知道实际的二进制内容代表什么。
【讨论】:
以上是关于如何从 SQL Server 文件表中的二进制数据中获取文件类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQL Server 2005 中另一个表中的相应数据更新一个表中的数据