Dans mon application Web (asp.net, c #), je télécharge un fichier vidéo dans une page mais je souhaite télécharger uniquement des vidéos flv. Comment puis-je restreindre la mise en ligne d'autres vidéos d'extension?
Dans mon application Web (asp.net, c #), je télécharge un fichier vidéo dans une page mais je souhaite télécharger uniquement des vidéos flv. Comment puis-je restreindre la mise en ligne d'autres vidéos d'extension?
Réponses:
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 index 5/6 vous indiqueront le type de fichier. Dans le cas du FLV, ses 70, 76, 86, 1, 5 .
private static readonly byte[] FLV = { 70, 76, 86, 1, 5};
bool isAllowed = array.Take(5).SequenceEqual(FLV);
si isAllowed
égale true
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, son "FLV ......"
content.StartsWith("FLV")
Sur le serveur, vous pouvez vérifier le type MIME, rechercher 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 faire
FileUpload.PostedFile.ContentType == "video/x-flv"
Vous ne pourrez pas restreindre le type de fichier que l'utilisateur télécharge côté client [*]. Vous ne pourrez le faire que du 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é. Il n'existe aucun moyen fiable et sûr d'empêcher un utilisateur de télécharger le format de fichier qu'il souhaite.
[*] Oui, vous pouvez faire toutes sortes de choses intelligentes pour détecter l'extension de fichier avant de démarrer le téléchargement, mais ne vous y fiez pas. Quelqu'un va contourner le problème et télécharger ce qu'il veut 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 "L'en-tête FLV".
J'ai trouvé une solution alternative chez DotNetPerls que j'ai mieux aimé car elle ne vous oblige pas à 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);
}
string FileExtn = System.IO.Path.GetExtension(fpdDocument.PostedFile.FileName);
La méthode ci-dessus fonctionne bien avec Firefox et IE, je suis capable de visualiser tous les types de fichiers comme zip, txt, xls, xlsx, doc, docx, jpg, png
mais quand j'essaye de trouver l'extension de fichier de googlechrome, j'ai échoué.
Il convient de mentionner comment supprimer l'extension également en parallèle avec l'obtention de l'extension:
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only