Pb sur upload de fichier en asp.net avec c# [Résolu]

Signaler
Messages postés
52
Date d'inscription
jeudi 1 janvier 2004
Statut
Membre
Dernière intervention
22 juillet 2008
-
Messages postés
52
Date d'inscription
jeudi 1 janvier 2004
Statut
Membre
Dernière intervention
22 juillet 2008
-
SAM

Pour des clients qui veulent transférer des fichiers de grosses taille sur le serveur, j'ai mis en place un service de ftp via un site web. Pour cela, j'utilise un form contenant une balise

Voici une partie du code (de la fonction appelée par l'évenement du click sur le bouton envoyer) qui effectue l'upload :



if (F_file.PostedFile !=
null)
{

try
{
Server.ScriptTimeout = 3600;

int taille = F_file.PostedFile.ContentLength;

string filename = Path.GetFileName(F_file.PostedFile.FileName);

// enregistrement du fichier sur le serveur
string path = Server.MapPath("./ftp/"+filename);
FileStream fichier =
new FileStream(path,FileMode.Create,FileAccess.Write);
Stream infile = F_file.PostedFile.InputStream;

byte[] b =
new
byte[500];

int nbcar = 0;

while ((nbcar = infile.Read(b,0,500))!=0)
{
fichier.Write(b,0,nbcar);
}
fichier.Close();
infile.Close();

}

catch (Exception err)
{

string texte = err.ToString();
LblError.Text = texte;

}
}



L'upload fonctionne très bien pour de petit fichier mais, j'obtiens une HttpException "Délai d'attente de la demande dépassé" sur des fichiers de plus de 2Mo (environ). En local, (exécution sur mon pc), sur 3Mo, ca passe car la sauvegarde est rapide, mais sur de très gros fichiers, 20Mo par exemple, le code ne passe même pas le test "if (F_file.PostedFile != null) " et il me dit qu'il ne trouve pas la page demandée (???).

Si quelqu'un a déjà eu des problèmes sur l'upload de gros fichiers et sait comment les résoudre... je suis preneur.

Merci.

PS : à noter que l'exception "Délai d'attente..." n'a apparement rien à voir avec le temps d'exécution coté serveur (limité à 90s coté administration IIS) car je le modifie avec Server.ScriptTimeout = 3600 (1 heure) et que cette dernière instruction fonctionne très bien sur d'autre page.

3 réponses

Messages postés
4
Date d'inscription
jeudi 11 août 2005
Statut
Membre
Dernière intervention
8 avril 2009

bonjour

Il y a deux parametres a prendre en compte:
1-) pour le time out:
dans iis il y a le parametrage de asp.net (du site publier concerné) tu fait edit configuration
tu vas dans l'onglet application et la tu as un delai de time out request (un fichier envoyer est sous forme de request) met la valeur en second que tu veux, ca limitera le temps de transfert max mais pas la taille du fichier

2-)pour la taille du fichier:
dans le fichier web.config de ton serveur iis il faut mettre (entre les balise configuration et system ) ce qu'il y a en italique:

<configuration .........>
 <system.web>
<!--
 <httpRuntime maxRequestLength="10240"/> (<= pour 10Mo)
 La valeur doit être comprise dans la plage 0-2097151
-->
    <httpRuntime executionTimeout="3600" maxRequestLength="2097151" />


  </system.web>
</configuration>

j'espere que ma response sera correcte :-)
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
Salut :

Ton problème est peut être dû au navigateur web du client qui veut tranférer le fichier. Pour le navigateur, l'upload n'est rien d'autre que l'affichage d'une page...et quand la page met vraiment beaucoup de temps à s'afficher (pour envoyer 20Mo par exemple)
, il abandonne de lui-même le chargement, ce qui donne : "Impossible de trouver la page demandée..." et tout le reste.

La solution la plus efficace est de tronquer les fichiers à uploader en plus petits, ce qui est un peu chiant pour le client...

Une autre solution est d'installer un petit programme côté client pour faire l'upload, ou même un ActiveX...

à+

Nurgle
C'est une grande folie que de vouloir être sage tout seul !
Messages postés
52
Date d'inscription
jeudi 1 janvier 2004
Statut
Membre
Dernière intervention
22 juillet 2008

SAM




Bonjour,

Oui la réponse est correcte. J'avais publié ce problème il y a qq années maintenant (d'ailleurs j'avais complètement oublié que j'avais un pb en cours sur codes sources). Depuis, j'avais trouvé le paramètre à renseigner dans le web.config.

Mais merci pour la réponse car elle pourra profiter à qq d'autres.

++