2010-02-04 9 views
8

Est-ce que quelqu'un sait une bonne solution pour limiter la taille de téléchargement de fichier lors de l'exécution d'une application Rails avec Passenger/mod_rails. La demande doit immédiatement être refusée, afin que le fichier ne soit pas transféré sur le serveur.Limite de taille de téléchargement de fichier Rails

Les solutions que j'ai trouvées jusqu'ici décrivent toutes comment patcher Mongrel pour implémenter une limitation, mais je dois utiliser le passager avec cette application.

Répondre

9

Vous pouvez limiter la taille de téléchargement via Apache en utilisant la directive LimitRequestBody:

<Directory "/var/www"> 
    LimitRequestBody 1024 
</Directory> 

http://httpd.apache.org/docs/1.3/mod/core.html#limitrequestbody

+0

c'est une solution possible. le problème ici est que apache quitte juste la connexion et à cause de cela il n'est pas possible d'afficher une page d'erreur – Mato

+0

Ouais, ceci est la validation côté serveur et est utilisé à des fins de sécurité. Vous devriez probablement utiliser un script côté client pour que les utilisateurs non malveillants soient avertis sur place. Si vous utilisez un plugin comme 'dropzone' c'est aussi simple que de mettre le' maxFilesize' – zehelvion

8

Vous pouvez utiliser le javascript suivant pour informer l'utilisateur que le fichier sélectionné dépasse la limite maximale. Mais encore faut-il avoir une validation côté serveur.

$('#id_of_input_file_field').change(function() { 
    if(this.files[0].size > MAX_LIMIT_FOR_FILE){ 
    $('#id_of_input_file_field').val(''); 
    alert('File exceeds maximum size limit ') 
} 
}); 

MAX_LIMIT_FOR_FILE est en octets, donc si vous voulez définir la limite maximale de 1Mo alors la valeur de MAX_LIMIT_FOR_FILE devrait être 1048576