PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment reconnaître un fichier texte de mon PC Linux via le code Django sans vérifier son extension ni sa taille de fichier ?

Vous souhaitez probablement détecter le type MIME du téléchargement, quelle que soit l'extension du fichier, et cela se fait souvent en lisant l'en-tête du fichier pour détecter les "nombres magiques" ou d'autres modèles de bits indiquant la véritable nature d'un fichier. Souvent, les fichiers texte sont un cas limite, où aucun en-tête n'est détecté et où les x premiers octets sont imprimables en ASCII ou Unicode.

Bien que ce soit un peu un trou de lapin dans lequel plonger, il existe quelques bibliothèques Python qui le feront pour vous. Par exemple :https://github.com/ahupp/python-magic fonctionnera pour vos besoins en déduisant simplement le type mime par le contenu du fichier, que vous comparerez ensuite aux types que vous souhaitez accepter.

Un ensemble quelque peu lié d'exemples de code spécifiques à vos besoins peut être trouvé ici :https://stackoverflow.com /a/28306825/7341881

Edit :la solution d'Eddie est une fonctionnalité équivalente ; python-magic enveloppe libmagic, ce à quoi la commande "file" native de Linux puise. Si vous décidez d'emprunter la voie du sous-processus, faites très attention à ne pas créer de vulnérabilité de sécurité en nettoyant de manière incorrecte l'entrée de l'utilisateur (par exemple, le nom de fichier fourni par l'utilisateur). Cela pourrait conduire à une attaque accordant un accès arbitraire à l'environnement d'exécution de votre serveur.