12
votes

Comment servir n'importe quel type de fichier avec la basehttPequestHandler de Python

Considérez l'exemple suivant: xxx pré>

Et si je veux serveur un fichier zip aussi ... Comment ferais-je cela? Je ne pense pas que cette ligne fonctionnerait bien? P>

self.wfile.write(f.read())


2 commentaires

Quelqu'un peut-il expliquer pourquoi l'appel à ouvrir () "rend potentiellement chaque fichier sur votre ordinateur lisible"? Et comment protégeriez-vous contre cela pour servir des fichiers dans cet exemple?


@brooksbp Je pense qu'il signifie que l'utilisateur pourrait saisir un chemin qui naviguerait dans un autre répertoire de votre ordinateur, par exemple en montant un ou plusieurs répertoires. Mais seuls les fichiers HTML sont accessibles à l'aide du code ci-dessus.


3 Réponses :


4
votes

Votre ligne fonctionnerait bien. Le problème définirait le type type de manière appropriée. Vous voudrez la définir sur application / zip au lieu de texte / html .


1 commentaires

C'est vrai, mais j'avais déjà fait ça. Josefassad a identifié le problème que j'avais eu. Mais tu es correct.



10
votes

Pass Binary comme paramètre à ouvrir (). Ceci: xxx

au lieu de ceci: xxx

Unix ne distingue pas entre binaire et texte, mais Windows fait. Mais si le script s'exécute sur UNIX, le "B" sera simplement ignoré de sorte que vous êtes en sécurité.


1 commentaires

Et en Python 3, Python fait une différence entre les fichiers binaires et textos, de sorte que vous puissiez aussi bien mettre le drapeau correct déjà maintenant. :)



4
votes

Si vous souhaitez partager des fichiers dans un dossier de n'importe quel type, vous pouvez également essayer de saisir la commande xxx

Ceci démarrera le serveur au port 8000 et vous pouvez parcourir les fichiers ( via la liste des répertoires)


0 commentaires