web-dev-qa-db-fra.com

Comment trouver l'extension d'un fichier?

Dans mon application Web (asp.net, c #), je télécharge un fichier vidéo sur une page, mais je ne télécharge que des vidéos flv. Comment puis-je limiter lorsque je télécharge d'autres vidéos d'extension?

102
Surya sasidhar

Path.GetExtension

string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
214
James

Vous pouvez simplement lire le flux d'un fichier 

using (var target = new MemoryStream())
        {
            postedFile.InputStream.CopyTo(target);
            var array = target.ToArray();

Les premiers 5/6 index vous indiqueront le type de fichier. En cas de FLV sa 

octet statique privé en lecture seule [] FLV = {70, 76, 86, 1, 5};

Just do - var isAllowed = array.Take(5).SequenceEqual(FLV);

si oui, alors son FLV.

OU 

Lire le contenu d'un fichier

var contentArray = target.GetBuffer();
                var content = Encoding.ASCII.GetString(contentArray);

Les deux/trois premières lettres vous indiqueront le type de fichier. En cas de FLV sa 

"FLV |\0\0\0\0\0\0 ......"

Just do - content.StartsWith("FLV")
12
Mukul Yadav

Sur le serveur, vous pouvez vérifier le type MIME, recherchez le type mime flv ici ou sur Google.

Vous devriez vérifier que le type mime est

video/x-flv

Si vous utilisiez un FileUpload en C # par exemple, vous pourriez le faire

FileUpload.PostedFile.ContentType == "video/x-flv"
7
Mark Dickinson

Je ne sais pas si c'est ce que vous voulez mais:

Directory.GetFiles(@"c:\mydir", "*.flv");

Ou:

Path.GetExtension(@"c:\test.flv")
6
Carra

De plus, si vous avez un FileInfo fi, vous pouvez simplement faire:

string ext = fi.Extension;

et il contiendra l’extension du fichier (remarque: il inclura le .; le résultat de ce qui précède pourrait donc être: .jpg.txt, etc.).

4
Noctis

Il est utile de mentionner comment supprimer l'extension également parallèlement à l'obtention de l'extension:

var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only

var extension = Path.GetExtension(fileFullName); // Get the extension only
2
string FileExtn = System.IO.Path.GetExtension(fpdDocument.PostedFile.FileName);

La méthode ci-dessus fonctionne bien avec firefox et IE, je suis en mesure d'afficher tous les types de fichiers tels que Zip, TXT, XLS, XLSX, doc, docx, jpg, png

mais quand j'essaie de trouver l'extension du fichier de googlechrome, j'ai échoué.

2
Papun Sahoo

Vous ne pourrez pas restreindre le type de fichier que l'utilisateur télécharge côté client [*]. Vous ne pourrez le faire que côté serveur. Si un utilisateur télécharge un fichier incorrect, vous ne pourrez le reconnaître qu'une fois le fichier téléchargé téléchargé. Il n’existe aucun moyen fiable et sûr d’empêcher un utilisateur d’importer le format de fichier qu’il souhaite.

[*] oui, vous pouvez faire toutes sortes de choses astucieuses pour détecter l'extension de fichier avant de commencer le téléchargement, mais ne vous en fiez pas. Quelqu'un le contournera et téléchargera ce qu'il voudra tôt ou tard.

2
ZombieSheep

Vous pouvez vérifier la signature .flv. Vous pouvez télécharger les spécifications ici:

http://www.Adobe.com/devnet/flv/

Voir le chapitre "En-tête FLV".

1
Marat Faskhiev

Cette solution est également utile dans le cas de plusieurs extensions telles que "Avishay.student.DB".

                FileInfo FileInf = new FileInfo(filePath);
                string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), "");
0
avishay

Se termine par()

Vous avez trouvé une solution alternative dans DotNetPerls que j’ai préféré, car elle ne nécessite pas de spécifier un chemin. Voici un exemple où j'ai rempli un tableau à l'aide d'une méthode personnalisée 

        // This custom method takes a path 
        // and adds all files and folder names to the 'files' array
        string[] files = Utilities.FileList("C:\", "");
        // Then for each array item...
        foreach (string f in files)
        {
            // Here is the important line I used to ommit .DLL files:
            if (!f.EndsWith(".dll", StringComparison.Ordinal))
                // then populated a listBox with the array contents
                myListBox.Items.Add(f);
        }
0
megamaiku