PDA

Visualizza la versione completa : [DELPHI] Upload via FTP di file corrotto usando Indy


president1991
05-11-2011, 00:17
Salve, io ho un problema con l'upload di file mdb su un server ftp con i componenti indy.
Praticamente io connetto correttamente ( eseguo sia il size che il download correttamente)
ma quando eseguo l'upload il file che carico risulta corrotto e impossibile da utilizzare ( ho provato anche con file immagine. Ho già provato con connessioni passive... È mai successo a qualcuno? C'è una soluzione??

Grazie

Ciao :)

alka
05-11-2011, 14:48
Posta il codice. :fagiano:

president1991
05-11-2011, 15:19
procedure TfrmMain.DownloadFile;
var i : Integer; ext, s, destinazione : String; b : boolean; remoto, locale : string;
begin
if (FTP.Connected = True) then
begin
FTP.Disconnect;
end;
frmMain.FTP.Host := Configurazione.Nome_Server;
frmMain.FTP.Username := Configurazione.Nome_Utente;
frmMain.FTP.Password := Configurazione.Password;
frmMain.FTP.Connect;
// Se la cartella TMP non esiste la Creo
if not(DirectoryExists('TMP')) then
begin
CreateDir('TMP');
end;
// Ordino il file e lo metto nella cartella TMP
if FileExists('TMP\tmp.mdb') then
begin
DeleteFile('TMP\tmp.mdb');
end;
Configurazione1.Indirizzo_db_copiato := 'TMP\tmp.mdb';
Configurazione1.Indirizzo_db := Configurazione.NomeFile_locale;
if (frm_conf.chkbox_oribruni_sort_copy_mdb.Checked = True) then
begin
frm_main.Show;
frm_main.BringToFront;
frm_main.Sort_Copy_MDB;
frm_main.Close;
end
else
begin
remoto:= Configurazione1.Indirizzo_db;
locale:= Configurazione1.Indirizzo_db_copiato;
CopyFile(Pchar(remoto), PChar(locale), true);
end;
s := Configurazione.NomeFile_remoto;
if (FTP.Size(s) > 0) then
begin // Cancello il file se è presente sul Server FTP.Delete(Configurazione.NomeFile_remoto);
end;
// Copio il file e preparo il file tmp
CopyFile(Pchar('TMP\tmp.mdb'), PChar('TMP\tmp.mdb.tmp'), true);
FTP.Put('TMP\tmp.mdb.tmp', destinazione );
FTP.Noop;
FTP.Rename(destinazione, configurazione.NomeFile_remoto);
FTP.Quit;
FTP.Disconnect;
end;
end;


Da me il codice è indentato correttamente ma qui non riesco a farlo visualizzare bene.
Se io verifico il file nella cartella tmp (prima di fare l'upload) viene aperto correttamente mentre quando lo scarico dal server con filezilla (e non solo) mi da problemi (e ha una dimensione diversa dal file iniziale, maggiore per giunta). Un db mdb di access mi da problemi sull'accesso (mi pare: "il file richiesto viene aperto da più utenti") mentre una foto mi dice di essere danneggiata.

Grazie =)

deleted_29
08-11-2011, 15:30
qualche osservazione

1) non userei quel componente per l'upload ftp, che è un'attività inerentemente asincrona
2) l'uomo saggio calcola prima l'hash del file, poi ri-scarica e riverifica (se vuol essere sicuro)
3) non creare una cartella temp "così", in un luogo non ben definito del file system, perchè se ad esempio finisci dentro programmi windows 7 e "cugini" con lo UAC ti impediranno praticamente qualsiasi cosa

Versione breve: ti serve un esempio "scemo" di upload FTP?
Se la risposta è "sì" non c'è problema, te lo preparo.

president1991
08-11-2011, 15:53
Mi servirebbe veramente un esempio grazie mille, è la prima volta ke lavoro con i componenti ftp. Comunque la cartella tmp me la crea dove risiede il file exe del programma...


Grazie mille :)

deleted_29
09-11-2011, 22:02
Originariamente inviato da president1991
Mi servirebbe veramente un esempio grazie mille, è la prima volta ke lavoro con i componenti ftp. Comunque la cartella tmp me la crea dove risiede il file exe del programma...
Appunto... (ovvero è male)



Grazie mille :) se non hai urgentissima necessità vedo di preparartelo

president1991
10-11-2011, 11:07
okok Grazie =)

comunque potresti dirmi come si chiamano intanto questi componenti x l'upload

Grazie

Federico

Loading