【问题标题】:C# Incorrect Mimetype returned application/octet-streamC# 不正确的 Mimetype 返回应用程序/八位字节流
【发布时间】:2019-11-03 10:47:28
【问题描述】:

我从 pinkode.net 窃取了一小段代码,我相信它是 - 可以找到任何文件的 mimetype。它工作得很好,非常需要。当我将代码推送到将调用该方法的 SSIS 包时,它总是返回相同的 mimetype,application/octet-stream。这是对这种方法的一种非常狭隘的使用,因为我只评估 .xls?文件。它在我的工作站 VS 项目上运行良好,但服务器上的相同代码运行良好但返回相同的类型。

Windows 10 服务器上定义的这种行为是什么/在哪里?文件关联妨碍了?我完全不知道为什么它不起作用并且没有真正尝试过。我可以找到并保留我知道的文件的 mimetype,但是这个 ETL 过程的目标是能够将任何 excel 解析为原始状态。从文件中获取 mimetype 对既定目标至关重要,并且在它存在于数据库服务器上之前一直运行良好。 ...

public static string getMimeFromFile(string file)
    {
        IntPtr mimeout;
        if (!System.IO.File.Exists(file))
            throw new FileNotFoundException(file + " not found");

        int MaxContent = (int)new FileInfo(file).Length;
        if (MaxContent > 4096) MaxContent = 4096;
        FileStream fs = File.OpenRead(file);


        byte[] buf = new byte[MaxContent];
        fs.Read(buf, 0, MaxContent);
        fs.Close();
        int result = FindMimeFromData(IntPtr.Zero, file, buf, MaxContent, null, 0, out mimeout, 0);

        if (result != 0)
            throw Marshal.GetExceptionForHR(result);
        string mime = Marshal.PtrToStringUni(mimeout);
        Marshal.FreeCoTaskMem(mimeout);
        return mime;
    }

...

【问题讨论】:

    标签: c# mime-types


    【解决方案1】:

    文件关联妨碍了?

    这似乎很有可能 - 请参阅此处算法中的第 4 步:MIME Type Detection in Windows Internet Explorer

    【讨论】:

    • 嗯。这似乎只是描述了我遇到的问题,但在 Internet Explorer 的上下文中?对我来说,大局是我有一个 Microsoft Flow 触发器,它在电子邮件中抓取文件附件并转储到 SQL Server 中的 Filestream 表中。然后,该服务会提取该文件 - txt、xls(x)、pdf 等,并推送到 ripper 以获取文件的任何风格。
    • 问题是 - 我的 excel 开膛手需要知道文件类型或 mimetype,因为我拥有的库只处理某些 Excel 文件。这些都不会发生在网络等环境中。如果我在我的工作站上运行相同的代码 - 它可以工作,但作为 SSIS 包中的脚本任务 - 我会得到这个模棱两可的。
    • 从文档中 FindMimeFromData 本质上只是查看文件扩展名,如果文件的内容与它知道的类型之一不匹配。所以你可以自己做同样的事情。或者在服务器上为 .xls 添加文件关联,甚至安装 Excel。
    • 大卫,谢谢!我与我的服务器管理员交谈,我们都不想安装 Excel 并刻录许可证,尤其是无意在专用数据库服务器上使用它。所以我去了我的一个注册表,只是导出了所有 xl* 扩展并合并到数据库服务器,它似乎像在我的机器上一样工作。
    • 仅供参考 - 任何有兴趣的人。 Microsoft 已将 .xls 用于 2 个非常不同的文件或 mimetypes-“application/vnd.ms-excel”和“text/xml”。更重要的是,只有一个 .xls 类文件关联到 vnd.ms-excel。因此,注册表根本不知道 text/xml,但该方法打开了实际上是 xml Excel 的 .xls 文件,并为其分配了足以供我使用的模棱两可的类型。希望这是有道理的。如果有使用 .xls 的第三种类型,那么我会遇到麻烦。希望这是有道理的
    猜你喜欢
    • 2015-01-27
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2011-06-15
    • 2017-10-21
    相关资源
    最近更新 更多