IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

fileupload+tester la taille du fichier


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut fileupload+tester la taille du fichier
    Bonjour, j'utilise un composant Fileupload et je voudrais tester la taille du document uploader pour savoir s'il est supérieure à la taille max accordée qui est actuellement et par défaut de 4Mo.

    Le problème est lorsque je clique sur le bouton de validation, j'ai la fênetre Internet Explorer ne peut pas afficher cette page Web. Et en mode debugger, il ne passe pas par le click du bouton, c'est comme s'il savait déjà qu'il ne peut pas aller plus loin. Comment intercepter cette "erreur".

    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Le code pour tester la taille
    FileUpload.PostedFile.ContentLength < 197000


    Par contre pour ton problème met un peu de code.

    De quel bouton tu parles ? le bouton "Parcourir" ou le bouton de validation que tu associe a ton controle

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Cette erreur provient du fait que la taille des requêtes est limité.

    Par défaut, tu ne peux uploader de fichier de plus de 2 Mo. Il est possible d'augmenter la taille maximale pour une application ASP.NET en ajoutant une petite ligne dans le web.config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <httpRuntime maxRequestLength="32768" />
    (je ne sais plus exactement où la mettre, regarde la doc)
    (32768 équivaut à 32 Mo pour l'exemple)

    Le problème effectivement, c'est que le navigateur, pour les requêtes plus grandes, affiche "qu'il ne peut afficher la page". Il n'y a aucun moyen de catcher cette erreur malheureusement car je pense que IIS bloque le flux avant de le transmettre à ASP.NET.

    Le problème en HTML classique, c'est qu'il est impossible de tester la taille du fichier avant l'envoi vers le serveur. Il faut passer par des solutions alternatives (uploader via ActiveX / Flash / Silverlight).

  4. #4
    Membre éprouvé
    Inscrit en
    Décembre 2003
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2003
    Messages : 108
    Par défaut
    pour catcher cette erreur tu peux passer par un httpmodule, je joint un bout de code qui je l'espère pourra t'aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     public class UploadHttpModule : IHttpModule
        {
            /// <summary>
            /// Initialize the HttpModule
            /// </summary>
            /// <param name="context"></param>
            void IHttpModule.Init(HttpApplication context)
            {
                if (context == null)
                {
                    throw new ArgumentNullException("context");
                }
                context.BeginRequest += OnBeginRequest;
            }
     
            private void OnBeginRequest(object sender, EventArgs e)
            {
                HttpApplication app = (HttpApplication)sender;
                if (app != null)
                {
                    if (app.Request.ContentType.StartsWith("multipart/form-data") && app.Request.ContentLength > 0)
                    {
                        int fileSize = app.Request.ContentLength;
     
                        HttpRuntimeSection httpRuntimeSection = ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
                        int httpMaxSize = httpRuntimeSection.MaxRequestLength;
     
                        if (fileSize > httpMaxSize * 1024)
                        {
                            int maxRequestLengthExceeded = 1;
     
                            //throw new ApplicationException("File too big");
                            StringBuilder redirectUrl = new StringBuilder(app.Request.Url.AbsolutePath);
                            redirectUrl.Append("?");
                            for (int i = 0; i < app.Request.QueryString.Count; i++)
                            {
                                if (app.Request.QueryString.Keys[i] != "maxRequestLengthExceeded")
                                {
                                    redirectUrl.Append(app.Request.QueryString.Keys[i]);
                                    redirectUrl.Append("=");
                                    redirectUrl.Append(app.Request.QueryString[i]);
                                    redirectUrl.Append("&");
                                }
                                else
                                {
                                    int.TryParse(app.Request.QueryString[i], out maxRequestLengthExceeded);
                                    maxRequestLengthExceeded++;
                                }
                            }
                            redirectUrl.Append("maxRequestLengthExceeded=");
                            redirectUrl.Append(maxRequestLengthExceeded.ToString());
                            app.Response.Redirect(redirectUrl.ToString());
                        }
                    }
                }
            }
     
            void IHttpModule.Dispose()
            {
                //nothing to do
            }
        }

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Donc, c'est le handler ASPX qui bloque le flux. Intéressant, j'y avais pas pensé.

  6. #6
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Bonjour à tous, alors le probleme est bien là j'ai la taille qui est limité à 4Mo en upload et lorsque je veux uploader un fichier plus grand, le upload fonctionne mais lorsque j'appelle le serveur il me dit : IE ne peut pas afficher cette page web.
    Actuellement je teste ajax avec un custom validator mais il ne passe pas dans le code en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    protected void MaximumSize(object source, ServerValidateEventArgs args)
        {
            //Get the information about the file that was uploaded.   
            HttpPostedFile postedfile = FUPieceJointe.PostedFile;
     
            //If the file was more than the minimum size   
            //of 4K, reject it.   
            if (postedfile.ContentLength > 4095)//4096 valeur en ko
            {
                args.IsValid = false;
                mPassedValidation = false;
            }
            else
                args.IsValid = true;
        }
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     protected void btnAjouterPJ_Click(object sender, CommandEventArgs e)
        { 
            if (mPassedValidation)
            {
    puis code aspx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <asp:CustomValidator Display="Dynamic" ID="CustomValidator1" runat="server" ErrorMessage="error" ControlToValidate="FUPieceJointe" OnServerValidate="MaximumSize"></asp:CustomValidator>
     
                <asp:Panel ID="PanelAjoutDocLie" runat="server" Visible="false">
                    <div class="ligne_form">
                        <div style="width:200px;text-align:left;">
                            <asp:Label ID="lblDocAttacheEtape" runat="server" Text="Document à attacher :"></asp:Label>
                        </div>
                        <div style="width:10px;">
                            <asp:Label ID="lblDocAttacheEtapeVide" Text="&nbsp;" runat="server"></asp:Label>
                        </div>
                        <div style="width:250px;">
                            <asp:FileUpload runat="server" ID="FUPieceJointe" />
                        </div>
                        <div class="bt_vide">
                            <asp:Label runat="server" ID="lblTailleEspace" Text="&nbsp;"></asp:Label>
                        </div>
                        <div>
                            <asp:Label runat="server" ID="lblTaille" Text="Taille limitée à 4M octets"></asp:Label>
                        </div>
                    </div>
                    <div class="ligne_form">
                        <div style="width:200px;text-align:left">
                            <asp:Label ID="lblDesignationDocEtape" runat="server" Text="Désignation du document :"></asp:Label>
                        </div>
                        <div style="width:10px">
                            <asp:Label ID="lblDesignationDocEtapeEspace" runat="server" Text="&nbsp;" ></asp:Label>
                        </div>
                        <div>
                            <asp:TextBox ID="txbDesignationDocEtape" runat="server" style="width:404px" ></asp:TextBox>
                        </div>
                        <div style="width:30px;">
                            <asp:TextBox ID="txbAjouter" Visible="false" runat="server" style="width:170px" ></asp:TextBox>
                        </div>
                        <div>
                            <asp:Button ID="btnAjouterPJ" runat="server" CssClass="bt_ajouter" Text="Ajouter" OnCommand="btnAjouterPJ_Click"></asp:Button>
                        </div>
                    </div>

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/08/2008, 12h17
  2. Tester la taille d'un fichier
    Par stylee307 dans le forum Windows
    Réponses: 0
    Dernier message: 22/04/2008, 04h05
  3. tester la taille d'un fichier TXT
    Par donbrico dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 11/02/2008, 21h58
  4. Tester la taille de fichier avant upload
    Par RobinNono dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 27/06/2006, 17h38
  5. [FileUpload]Controle de la taille du fichier transféré
    Par K-Kaï dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 30/05/2006, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo