使用c#,我如何确定上传的文件是否有任何可访问的元数据/文档属性

本文关键字:访问 任何可 元数据 属性 文档 是否 文件 何确定 使用 | 更新日期: 2023-09-27 18:15:20

假设我有一个允许用户上传任何类型文件的程序。除了获取文件类型和文件大小等通用信息外,我还想尝试获取可能随文档一起传输的任何额外信息(例如文档属性,如作者、上次修订等)。

由于我事先对传入的文档/文件没有任何了解,所以我不能简单地使用特定于Microsoft Office文档的类。我需要一般地这样做,然后构造一个动态对象或字典来保存任何找到的键/值结果。

这可能吗?如果有,怎么做?任何帮助都是感激的!

使用c#,我如何确定上传的文件是否有任何可访问的元数据/文档属性

我在StackOverflow上找到了一些答案,但是没有一个给我一个好的,干净的文档属性字典。这是我最后想到的,它似乎工作得很好(你需要从COM文件夹中引用"Microsoft Shell控件和自动化",并将using Shell32;添加到你的代码中:

 public static Dictionary<string,string> GetDocumentMetadata(string fileName)
        {
            var properties = new Dictionary<string,string>();
            var arrHeaders = new List<string>();
            var shell = new Shell();
            var objFolder = shell.NameSpace(HttpContext.Current.Server.MapPath("~/RawFiles"));
            var file = objFolder.ParseName(fileName);
            for (var i = 0; i < short.MaxValue; i++)
            {
                var header = objFolder.GetDetailsOf(null, i);
                if (String.IsNullOrEmpty(header))
                    break;
                arrHeaders.Add(header);
            }
            for (var i = 0; i < arrHeaders.Count; i++)
            {
                var value = objFolder.GetDetailsOf(file, i);
                if (!String.IsNullOrEmpty(value))
                {
                    properties.Add(arrHeaders[i], value);
                }
            }
            return properties;
        }