Ciao a tutti.
Ho un problema con una mini applicazione di Upload via FTP da integrare ad un sistema già esistente.
Il problema consiste nel non avere un feedback di termine upload su file di grossa dimensione. Questo comporta che la pagina di upload resta in standby e chi s'è visto s'è visto.
Il problema non accade invece con file piccoli.
Di seguito l'estrazione dell'ultima versione della funzione di upload che sto realizzando.
Codice PHP:
public void UploadFile()
{
object w = new object();
try
{
string nameFile = FTP_FileUpload.FileName;
bool okUpload = false;
if (!Ftp_ExistFile(FTP_FileUpload.FileName))
{
okUpload = true;
}
else
{
if (nameFile == FileEsistente)
{
okUpload = true;
}
else
{
throw new Exception("ATTENZIONE!
Il file " + FTP_FileUpload.FileName + " è già presente nella directory " + SubDir + "
Rinominare il file e ripetere l'operazione oppure selezionare il file dalla directory attraverso la funzionalità di ricerca.");
}
}
if (okUpload)
{
#region Upload del File
//Apro una connessione
FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(FTP_Server + SubDir + "/" + nameFile);
ftp.UsePassive = true;
ftp.ReadWriteTimeout = 10000000;
ftp.Timeout = 10000000; // Any big number
//ftp.KeepAlive = true;
//Aggiungo le credenziali
ftp.Credentials = new NetworkCredential(FTP_User, FTP_PWD);
//Indico il comando di uplaod
ftp.Method = WebRequestMethods.Ftp.UploadFile;
byte[] arrayFile = new byte[FTP_FileUpload.PostedFile.ContentLength];
Stream read = FTP_FileUpload.PostedFile.InputStream;
//Riempio l'array
read.Read(arrayFile, 0, FTP_FileUpload.PostedFile.ContentLength);
w = ftp.GetRequestStream();
//Scrivo il contenuto dell'array
((Stream)w).Write(arrayFile, 0, arrayFile.Length);
//((Stream)w).Close();
#endregion
#region Verifica Stato Upload
int FileDimension = 0;
while (FTP_FileUpload.FileBytes.Length > FileDimension)
{
FtpWebRequest _FtpRequest = (FtpWebRequest)WebRequest.Create(FTP_Server + SubDir + "/" + nameFile);
_FtpRequest.Credentials = new NetworkCredential(FTP_User, FTP_PWD);
//Richiesta ListDirectory
_FtpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
//Inoltro richiesta e attesa risposta
FtpWebResponse _FtpResponse = (FtpWebResponse)(_FtpRequest.GetResponse());
//La risposta è uno stream
StreamReader sr = new StreamReader(_FtpResponse.GetResponseStream(), System.Text.Encoding.ASCII);
string file = sr.ReadToEnd();
FileDimension = Convert.ToInt32(file.Split(' ')[file.Split(' ').Length - 5]);
}
#endregion
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
((Stream)w).Close();
//((Stream)w).Dispose();
}
return;
}

Grazie in anticipo.
Sergio
P.S.
La "Verifica Stato Upload" è stata aggiunta per vedere tramite debug l'effettivo upload del file. Probabilmente verrà successivamente integrata per comunicare l'avanzamento del processo.