Après avoir parcouru tous les articles sur le téléchargement de fichiers volumineux dans csdn, j'ai écrit ce déchet. (:-))
Il existe plusieurs façons de télécharger des fichiers volumineux :
1. La méthode HttpWorkerRequest de Sigui est trop difficile à comprendre :-(
2. Utilisez le contrôle tiers AspNetUpload pour demander de l'argent ! ! Oubliez ça, nous aimons toujours la gratuité.
3. Modifiez le fichier web.config, mais ne parvenez pas à détecter les erreurs.
4. Téléchargez via FTP. Le serveur doit fournir un service FTP.
Nous n’avons pas d’autre choix que de choisir la troisième voie. Qui nous rend si stupides ! (C’est trop stupide. Ce n’est pas grave. Vous devriez manger plus de poisson. J’ai entendu dire que manger du poisson peut vous rendre plus intelligent.)
Alors étudiez attentivement la troisième méthode !
Modifier le fichier Webcong :
<système.web>
<httpRuntime maxRequestLength="40690"
useFullyQualifiedRedirectUrl="true"
exécutionTimeout="6000"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
activerVersionHeader="true"
/>
</system.web>
Parmi eux, ceux étroitement liés au téléchargement sont :
maxRequestLength
Indique la taille maximale de téléchargement de fichier prise en charge par ASP.NET.
Cette limite peut être utilisée pour empêcher les attaques par déni de service provoquées par les utilisateurs transmettant un grand nombre de fichiers au serveur.
La taille spécifiée est en Ko.
La valeur par défaut est 4 096 Ko (4 Mo).
exécutionTimeout
Indique le nombre maximum de secondes pendant lesquelles une requête est autorisée à s'exécuter avant d'être automatiquement fermée par ASP.NET.
L'unité est la seconde. Réglez cette valeur sur une valeur plus élevée lors du téléchargement de fichiers volumineux.
Si la mémoire du serveur est de 512 Mo, des fichiers de 160 Mo peuvent être téléchargés. (Je ne l'ai pas essayé. C'est l'avis unanime de nombreux articles sur csdn.)
'www.downcodes.com
À ce stade, les paramètres de web.config sont terminés.
Cependant, une fois que la taille du fichier téléchargé dépasse la plage de taille de fichier définie, l'erreur suivante se produit :
La page ne peut pas être affichée. La page que vous souhaitez afficher est actuellement indisponible. Le site Web rencontre peut-être des difficultés techniques ou vous devrez peut-être ajuster les paramètres de votre navigateur.
Bien que cela ne puisse pas être résolu, nous devons toujours détecter cette erreur ! Ce qu'il faut faire?
J'ai mangé quelques poissons récemment et j'y ai réfléchi. Étant donné que cette erreur est une erreur de premier plan causée par le contrôle de fichier, il n'est pas possible d'utiliser try...catch pour l'attraper en arrière-plan.
J'ai donc pensé à utiliser le mécanisme de page de capture d'erreurs de .NET pour le gérer. C'est faisable.
1. Configurez d'abord web.config
<customErrors mode="On"/>
2. Créez un nouveau fichier error.aspx spécifiquement pour détecter les erreurs.
3. Ajoutez la directive page à la première page de la page aspx où le fichier est téléchargé. ErrorPage="UploadError.aspx"
4. Ajoutez du code à error.aspx pour déterminer si le message d'erreur est une erreur de premier plan provoquée par le fichier.
classe publique UploadError : System.Web.UI.Page
{
private void Page_Load (expéditeur de l'objet, System.EventArgs e)
{
Exception ex = Server.GetLastError();
si (ex != nul)
{
Réponse.Redirect("../erreur.aspx");
}
else //L'erreur de premier plan ex est une valeur nulle
{
Response.Redirect("uploadexcel.aspx?err=1"); //Retournez à la page de téléchargement et ajoutez le paramètre err pour afficher le message d'erreur
}
}
5. Afficher le message d'erreur.
classe publique uploadexcel : System.Web.UI.Page
{
private void Page_Load (expéditeur de l'objet, System.EventArgs e)
{
si (Requête["err"] == "1")
{
Page.RegisterStartupScript("budget","<script language = javascript>alert('Le téléchargement du fichier a échoué ! La taille du fichier est trop grande !')</script>");
}
}
}
6. Faites-le et arrêtez-vous. (Ce poisson n'est pas gratuit.)
Après la modification ci-dessus, le téléchargement indique désormais que le programme spécifie la taille du fichier. Si elle dépasse, un message d'erreur apparaîtra.
De cette façon, ce sera bien mieux. Au moins, je peux l'accepter, et ce ne sera pas trop difficile à expliquer aux utilisateurs.