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 <input type=file id="F_file" runat="server" />
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.