C # Неверный Mimetype возвращает приложение / октет-поток - PullRequest
0 голосов
/ 20 июня 2019

Я украл кусок кода с pinkode.net, я думаю, что это - это найдет mimetype любого файла. Он прекрасно работает и очень нужен. Когда я помещаю код в наш пакет служб SSIS, который будет вызывать метод, он всегда возвращает один и тот же mimetype, application / octet-stream. Это очень узкое применение этого метода, поскольку я оцениваю только .xls? файлы. Он отлично работает на моем проекте VS рабочей станции, но тот же код на сервере работает нормально, но возвращает тот же тип.

Что / где определяется этот тип поведения на сервере Windows 10? Файловые ассоциации мешают? Я полностью в замешательстве относительно того, почему это не работает и действительно не попробовало. Я мог бы найти и сохранить mimetype для файлов, о которых я знаю, но цель этого процесса ETL состояла в том, чтобы иметь возможность проанализировать любое превосходство в необработанном состоянии. Получение 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;
    }

...

1 Ответ

1 голос
/ 20 июня 2019

Связи файлов мешают?

Кажется вполне вероятным - см. Шаг 4 в алгоритме здесь: Определение типа MIME в Windows Internet Explorer

...