Flask: récupère la taille de l'objet request.files
je veux obtenir la taille de téléchargement de l'image pour contrôler s'il est supérieur à max d'upload de fichier limite.J'ai essayé celui-ci:
@app.route("/new/photo",methods=["POST"])
def newPhoto():
form_photo = request.files['post-photo']
print form_photo.content_length
Imprimés 0
Où suis-je fais de mal? Devrais-je trouver la taille de cette image à partir du chemin d'accès temporaire? N'est-il pas quelque chose comme PHP $_FILES['foo']['size']
en Python?
source d'informationauteur saidozcan
Vous devez vous connecter pour publier un commentaire.
Il y a quelques choses à connaître ici - la content_length propriété sera la longueur du contenu de l'upload de fichier tel que rapporté par le navigateur, mais malheureusement de nombreux navigateurs ne pas envoyer cette, comme indiqué dans le docs et source.
Comme pour votre TypeError, la prochaine chose à prendre en compte est que les uploads de fichier sous 500KB sont stockées dans la mémoire comme un StringIO objetplutôt que mis en file d'attente sur le disque (voir les docs de nouveau), de sorte que votre stat appel échouera.
MAX_CONTENT_LENGTH est la bonne façon de rejeter les uploads de fichier plus grand que vous voulez, et si vous en avez besoin, la seule méthode fiable pour déterminer la longueur des données est de le comprendre, après avoir manipulé le téléchargement soit stat le fichier une fois que vous avez
.save()
d:Ou si vous n'utilisez pas le disque (par exemple de les stocker dans une base de données), compter le nombre d'octets que vous avez lu:
Bien évidemment être prudent, vous ne lisez pas trop de données dans la mémoire si votre MAX_CONTENT_LENGTH est très grand
Si vous ne voulez pas enregistrer le fichier sur le disque, utiliser le code suivant, ce travail sur les flux de mémoire
sinon, ce sera mieux
La bonne façon de mettre un max d'upload de fichier limite est via le
MAX_CONTENT_LENGTH
configuration de l'application. Par exemple, si vous souhaitez définir une limite de téléchargement de 16 méga-octets, vous devez faire ce qui suit à votre configuration de l'application:Si le fichier téléchargé est trop grande, le Flacon sera automatiquement renvoyer le code d'état 413 Entité de Demande Trop Grande cela devrait être géré sur le côté client.
De l'article suivant du code, il faut répondre à votre objectif..
Que quelqu'un d'autre l'a déjà suggéré, vous devez utiliser le
pour limiter la taille de fichier. Mais
Puisque vous souhaitez trouver la taille de l'image, vous pouvez le faire: