PDA

Visualizza la versione completa : [DELPHI] download file


ElyFly
14-02-2005, 12:13
Salve a tutti!

Come faccio a fare il download di un file da una pagina web, quando questa viene aperta (oppure, quando viene cliccato un link)?

Devo utilizzare i componenti Indy?

grazie

Eli

AlbertoPicca
14-02-2005, 13:44
Originariamente inviato da ElyFly

Devo utilizzare i componenti Indy?

Esatto!

Dal mio punto di vista, se devi solo fare il download di un determinato file puoi usare il protocollo TCP per il trasporto dei dati.

Altrimenti usi il classico HTTP.

:ciauz:

ElyFly
14-02-2005, 15:10
bene, ma... che funzione devo chiamare per effettuare veramente il download?? :(
Thx

alka
14-02-2005, 15:28
Il componente TIdHttp possiede un metodo Get che consente di specificare l'URL dal quale scaricare un file.

Per ulteriori informazioni, consulta la Guida in linea dei componenti Indy.

Ciao! :ciauz:

ElyFly
14-02-2005, 15:47
... io ho provato ad usarlo, ma... non ho capito che parametri devo passargli:
io gli passo come primo argomento l'url da dove dovrà scaricare il file e come secondo un filestream???? e qst filestream rappresenterebbe il mio file? e dove me lo copierebbe??

alka
14-02-2005, 15:51
Se non ricordo male, quando crei un'istanza di TFileStream, devi specificare il nome del file, o meglio il percorso completo.

In alternativa, puoi usare un TMemoryStream per immagazzinare in memoria il contenuto del file; attraverso il metodo SaveToFile, successivamente puoi salvare su disco i dati ottenuti.

Indipendentemente dal tipo di Stream che utilizzi per immagazzinare il file scaricato, tale oggetto va passato come secondo parametro del metodo.

Il primo parametro rappresenta l'URL del file da scaricare; ad esempio, http://miodominio/percorso/nomefile.estensione.

Ciao! :ciauz:

ElyFly
14-02-2005, 16:29
Allora, ditemi se sbaglio:

e se usassi la funzione CopyFileTo(filesrc, filedest)...?

il filesrc è quello sul server e il filedest è quello che creo in locale.....

può essere..? a me nn convince molto, però non riesco a fare altrimenti...

alka
14-02-2005, 16:36
Perche non usi il metodo Get del componente? Quale errore ottieni? Cosa non riesci a fare?

A volte ho l'impressione che, quando scrivi, tu voglia imporre una soluzione a chi ti risponde piuttosto che seguire i suggerimenti. :)

Ciao! :ciauz:

ElyFly
14-02-2005, 16:43
No no, assolutamente, altrimenti non continuerei nemmeno a postare.... è che con il metodo get non mi succede assolutamente nulla....
ho provato sia con i TFileStream che con i TMemoryStream.....

ti mando un pezzo del codice così mi dici dove cano:
-----------------------------------------
var
obj: TIdHTTP;
M: TMemoryStream;
begin
M := TMemoryStream.Create();
obj.Create(obj);
obj.Get('url\edna.gif', M);
M.SaveToFile('C:\edna.gif');
end;
-----------------------------------------

:ciauz:

alka
14-02-2005, 16:51
Ti posto il codice con qualche modifica e aggiustamento:


var
ms: TMemoryStream;
begin
ms := TMemoryStream.Create;
try
IdHTTP.Get('url', ms);
ms.Position := 0;
ms.SaveToFile('nome.estensione');
finally
ms.Free;
end;
end;

Inoltre, ho visto che generi dinamicamente anche il componente TIdHttp: io ti suggerirei di inserirlo nel form attraverso la Palette dei Componenti e accertandoti che le proprietà essenziali siano impostate.

Ad ogni modo, la creazione corretta di un componente andrebbe fatta in questo modo:


IdHttp := TIdHttp.Create(nil);
try
// ...operazioni con TIdHttp
finally
IdHttp.Free;
end;

Ciao! :ciauz:

Loading