2017-05-09 1 views
0

J'ai fait un petit serveur avec flask pour télécharger des fichiers (et ensuite faire des choses avec eux). Le téléchargement se fait par et formulaire HTML qui envoie un fichier:Server ne parvient pas à télécharger de gros fichiers avec gunicorn

<form action="/upload" method="POST" enctype="multipart/form-data"> 
    <input type="file" name="file"> 
    <input type="submit"> 
</form> 

Du côté du serveur, je fais ce qui suit:

@app.route('/upload', methods=['POST']) 
def upload(): 
    if 'file' in request.files: 
     f = request.files['file'] 
     file_path = os.path.join(app.config['UPLOAD_FOLDER'], werkzeug.secure_filename(f.filename)) 
     f.save(file_path) 

    return 'File is being uploaded' 

Il fonctionne très bien pour les petits fichiers, mais sur de gros fichiers, il échoue. Le problème est que si je cours manuellement le script pas à travers gunicorn python main.py je peux télécharger des fichiers que je ne pouvais pas auparavant. Je pensais que j'avais besoin de changer la taille maximale de gunicorn mais je ne pouvais pas trouver comment le faire. J'ai également pensé à utiliser un flux et ensuite écrire des morceaux, mais encore une fois, je ne pouvais pas trouver comment accéder au flux avec flacon.

Merci pour votre aide

+0

« Il fonctionne très bien pour les petits fichiers, mais sur de gros fichiers, il tombe en panne. » De quelle façon? – pvg

Répondre

-1

Il pourrait être dû à un problème de délai. Par défaut, gunicorn va se bloquer si un processus prend plus de 30 secondes. Le temps de télécharger un fichier volumineux peut facilement dépasser ce montant. Vous souhaiterez peut-être spécifier une valeur de délai d'expiration personnalisé lorsque vous lancez gunicorn. Par exemple, si vous voulez régler le délai de 300 secondes: exec gunicorn [app]:[app] --timeout 300

Source: gunicorn timeout setting