C#错误的Mimetype返回了应用程序/八位字节流

时间:2019-06-20 15:08:52

标签: c# mime-types

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

在Windows 10服务器上定义什么类型的行为?文件关联妨碍了?我完全不知道为什么它不起作用并且还没有真正尝试过。我可以找到并保留我所知道文件的模仿类型,但是ETL过程的目标是能够将所有excel解析为原始状态。从文件中获取mimetype对于达到既定目标至关重要,直到它驻留在db服务器上之前,它一直可以正常工作。 ...

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;
    }

...

1 个答案:

答案 0 :(得分:1)

  

文件关联受阻?

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