33 votes

Comment obtenir le contenu/type d'un fichier au moment de l'exécution ?

J'essaie de déterminer dynamiquement le contenu/type d'un fichier d'entrée. Si j'étais dans une application Windows, je pourrais écrire un code comme celui-ci ( de ce blog )

private string GetContentType(string fileName) {
    string contentType = "application/octetstream";
    string ext = System.IO.Path.GetExtension(fileName).ToLower();
    Microsoft.Win32.RegistryKey registryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);
    if (registryKey != null && registryKey.GetValue("Content Type") != null)
        contentType = registryKey.GetValue("Content Type").ToString();
    return contentType;
} 

Quelles autres méthodes sont plus appropriées pour une application MVC ?

Je voudrais utiliser le paramètre dans le cadre de la Controller.File(...) qui reçoivent un chemin de fichier et un type de contenu.

1voto

James Harris Points 1884

Le fichier est-il téléchargé vers l'application MVC ?

public ActionResult FileUploader(HttpPostedFileBase upload)
{
  string mimeType=upload.ContentType;
}

Il y a cependant quelques réserves à faire à ce sujet.

Il utilise le type mime fourni par le navigateur, c'est-à-dire le type mime fourni par le client. Si les utilisateurs qui téléchargent des éléments ne sont pas authentifiés ou fiables, ce n'est peut-être pas une bonne idée.

De même, IE ne donne pas toujours les types Mime standard pour certains fichiers, en particulier les PNG (cf. Quelle est la différence entre "image/png" et "image/x-png" ? ) qui peuvent ou non affecter votre application.

Nous utilisons une simple instruction if pour convertir le type de fichier png d'IE (image/x-png) en un type plus courant (image/png).

0voto

Brian R. Bondy Points 141769

Si vous êtes sur un système de type linux/unix, vous pouvez utiliser la commande file pour déterminer le type de fichier.

Il y a trois séries de tests, effectués dans cet ordre : tests du système de fichiers, tests du nombre magique et tests de la langue. Le premier test qui réussit provoque l'impression du type de fichier.

Si vous êtes sur une machine Windows, il est courant d'utiliser l'extension de fichier comme vous l'avez montré dans votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X