在MS Access数据库中 - 我有一个列 - 数据类型图像
在这些列中,使用VBA存储了一些office文档(xls,xlsx,doc,docx,pdf) - 我发现Access Application在使用VBA保存数据时自动添加标题; 当您打开它时 - 它会自动检测文件扩展名并使用其各自的应用程序(如Microsoft Excel / Word / PowerPoint)打开它。
我想用C#实现同样的目标,我得到了很好的工具:Mime-Detective https://github.com/Muraad/Mime-Detective
作为POC,我已经在WinForms上使用FileUpload上传了它,并且它有效。 但是,从Access数据库打开文件时,它无法找到其扩展名。
可能是Access数据库上的标题会有所不同还是有更多偏移?
请帮忙。
修改 使用VB =>开发应用程序的前一个团队MSACCESS使用OLE对象来存储内容 - 它似乎是标题。
现在需要迁移这些内容(主要是办公文档),这次使用C#(WinForms或基于Web的技术),挑战是获得确切的文件扩展名。
出于测试目的,我使用Mime-Detective工具创建了一个简单的WinForm,用于从具有相同DataType的测试数据库上传/读取byte [],它可以很好地工作。
使用相同的代码,这次我从Access数据库读取byte []时,我无法读取。
正如您在下面看到的那样,起始字节看起来并不相似,尽管两者都是xlsx文件。
我怀疑OLE Object会在标题中添加一些额外的信息吗?
目前,为获取FileType,偏移量设置为512 - 有没有办法从byte []对象中找到偏移量计算?
public readonly static FileType WORDX = new FileType(new byte?[0], 512, "docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
public readonly static FileType EXCELX = new FileType(new byte?[0], 512, "xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
public readonly static FileType WORD = new FileType(new byte?[] { 0xEC, 0xA5, 0xC1, 0x00 }, 512, "doc", "application/msword");
public readonly static FileType EXCEL = new FileType(new byte?[] { 0x09, 0x08, 0x10, 0x00, 0x00, 0x06, 0x05, 0x00 }, 512, "xls", "application/excel");
Start Bytes from Access Database [xlsx]
0x151C3A00020000001100150014002500FFFFFFFF4163726F62617420446F63756D656E74004163726F457863682E446F63756D656E742E3131000105000002000000150000004163726F457863682E446F63756D656E742E313100000000000000000000DE1700D0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000000000000180000000100000000000000001000000200000001000000FEFFFFFF000000000000000004000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Start Bytes from Test Sql Database [xlsx]
0x504B03041400060008000000210034E1EA94ED0100002B0A0000130008025B436F6E74656E745F54797065735D2E786D6C20A2040228A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
感谢。