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?
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
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")
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"
Je ne sais pas si c'est ce que vous voulez mais:
Directory.GetFiles(@"c:\mydir", "*.flv");
Ou:
Path.GetExtension(@"c:\test.flv")
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.).
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
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é.
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.
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".
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), "");
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);
}