[Http.server]Upload fichier

Signaler
Messages postés
10
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
6 octobre 2020
-
Messages postés
10
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
6 octobre 2020
-
Bonjour à tous,
je me permet de créer ce forum car je me trouve dans une impasse.
J'ai créé un serveur python à l'aide du module Http.serveur. Sur ce serveur, ma première page HTML demande à l'utilisateur d'entrer un fichier Excel.
Lorsque que mon site-web est exécuté depuis l'ordinateur où est logé le serveur, le transfert de fichier se fait parfaitement.
Mais lorsque j'accède à mon site depuis un autre ordinateur connecter au même wifi, le fichier est bien envoyé au serveur mais le fichier est corrompu est sa taille diminue (de 105Ko à 40Ko).

J'aimerai savoir s'il y a un soucis avec mon serveur ou mon code, ou bien s'il faut le paramétrer afin qu'il accepte les fichiers plus lourd.

Je vous remercie par avance de votre attention.

Bonne Journée à tous.

PS : je suis étudiant ingénieurs et donc débutant dans ce langage.

Voici quelques photos de mon programme :

Serveur :


Index :


Upload :

4 réponses

Messages postés
12582
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 octobre 2020
700
bonjour, au lieu de partager des images de ton code, peux-tu partager le texte source, en utilisant les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Messages postés
10
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
6 octobre 2020

Rebonjour,
Pas de soucis
voici mon code :

Serveur :
#coding : utf-8
import http.server


PORT = 80
address = ("0.0.0.0", PORT)

server = http.server.HTTPServer

handler = http.server.CGIHTTPRequestHandler
handler.cgi_directories = ["/"]

httpd = server(address, handler)


print ("Serveur actif sur le port :", PORT)



httpd.serve_forever()


Index :
#coding: utf-8

import os
try :
    os.mkdir('Corbeille')
except :
    a=2
print("Content-type: text/html; charset=utf-8\n")
html ="""<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>Outils de matching</title>
</head>
<body>
    <p>Veuillez selectionner le fichier candidat.</p> 
    <form action=upload_candidat.py method="POST" enctype="multipart/form-data">
        <input type="file" name="filename" accept=".xlsx">
        <input type="submit">
</body>
</html>
"""

print(html)



Upload :

import cgi
import cgitb
import os


print("Content-type: text/html; charset=utf-8\n")

form = cgi.FieldStorage()
cgitb.enable()

fileitem = form['filename']

if fileitem.filename:
    fn = os.path.basename(fileitem.filename)
    open(fn, 'wb').write(fileitem.file.read())
else :
    print("error")


Merci de votre attention.
Messages postés
12582
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 octobre 2020
700
j'ai fait plusieurs tests, avec plusieurs adaptations du code.
je ne parviens pas à éliminer le problème. je l'obtiens également parfois en travaillant en local.
il me semble que le code ne traite ou ne reçoive que le début du fichier. je n'obtiens pas toujours le même comportement, la longueur reçue varie.
j'ai ajouté des délais, et lu le fichier en petits morceaux, sans succés.

j'ai l'impression que ces modules python ne fonctionnent pas bien, peut-être incompatibles avec windows 10.
Messages postés
10
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
6 octobre 2020

Merci de vos testes,
Pensez-vous que si le code est lancé sur une carte rasberry PI cela pourrait-être resoudre le problèmes ?
Messages postés
12582
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 octobre 2020
700
aucune idée, mais si nous testions tous les deux sur windows, cela vaut la peine d'essayer ailleurs.
Messages postés
413
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
11 octobre 2020
194
Bonjour, je viens de tester votre code sur un rasberry pi et ça fonctionne parfaitement (testé avec un fichier de 100ko).
Il y a peut-être une différence entre Windows et Linux mais je n'ai pas pu comparer car je n'ai pas de système Windows sous la main.

PS : J'ai seulement eu quelques difficultés à l'exécuter au début car il faut ajouter
#!/usr/bin/python3
au début des fichiers index.py et upload_candidat.py sour les systèmes UNIX. Ça vous évitera de perdre du temps comme moi ;)
Messages postés
10
Date d'inscription
vendredi 3 juillet 2020
Statut
Membre
Dernière intervention
6 octobre 2020
>
Messages postés
413
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
11 octobre 2020

C'est noté je vais ajouter cette ligne à mon code et ça va me faire gagner beaucoup de temps ;)

Si cela marche parfaitement sur la carte rasberry mon soucis devrait-être résolue.

Merci à vous d'avoir consacré du temps à mon soucis.

Bonne soirée à vous.