Bilder herunterladen
Hallo,
ich muss auf einem Server Bilder herunterladen. In der ersten Zeile eines Stringgrids stehen untereinander die Bildnamen: Zitat:
Delphi-Quellcode:
Das klappt auch soweit, ist nur mega langsam.
function GetFile(const fileURL, FileName: String): boolean;
const BufferSize = 1024; var hSession, hURL: HInternet; Buffer: array[1..BufferSize] of Byte; BufferLen: DWORD; f: File; sAppName: string; begin Result:=False; sAppName := ExtractFileName(Application.ExeName); hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try hURL := InternetOpenURL(hSession, PChar(fileURL), nil,0,0,0); try AssignFile(f, FileName); Rewrite(f,1); repeat InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); BlockWrite(f, Buffer, BufferLen) until BufferLen = 0; CloseFile(f); Result:=True; finally InternetCloseHandle(hURL) end finally InternetCloseHandle(hSession) end end; Ich mache das so:
Delphi-Quellcode:
Gibt es eine schnellere Methode wie ich die Bilder downloaden kann?
procedure TForm1.Button2Click(Sender: TObject);
var i, ib :integer; begin for i := 1 to StringGrid1.RowCount - 1 do begin if stringgrid1.GetCheckBoxState(0, i, state) then begin if state = true then Memo1.Lines.add(Stringgrid1.Cells[1, i]); for ib := 0 to memo1.lines.count - 1 do begin GetFile('http://server/bilder/'+ memo1.lines.strings[ib]+ '.jpg','C:\temp\'+ memo1.lines.strings[ib]+ '.jpg'); end; end; end; end; Grüße Capo |
Re: Bilder herunterladen
Hi!
Vllt. kommst du hiermit schneller zum gewünschten Erfolg: http://www.delphipraxis.net/internal...downloadtofile Ciao, Frederic |
Re: Bilder herunterladen
Hallo Frederic,
nein, das ist vom Prinzip her das gleiche. Hatte ich auch schon gesehen. Dankeschön für deine Antwort. Vito |
Re: Bilder herunterladen
Ich weiss nicht, ob dich das weiter bringt, aber ... Hier ist von meinem Browser. K.A woher ich den hab.
Delphi-Quellcode:
Aufrufen kann man sie so
procedure tform1.DL; // Hier Startet man den Download
var Savedir,Webdir,Filename,Fileext: String; url,ziehl: pchar; cDownStatus : cDownloadStatusCallback; x,y:integer; begin abort:=false; x:=0; y:=1; cDownStatus := cDownloadStatusCallBack.Create; Savedir:=edt1.Text; //createdir(ziehl); //edt2.Text:=ziehl; for i := 0 to Listbox2.items.Count - 1 do //listbox ist die Liste mit bildern if abort=false then begin Application.ProcessMessages; url:=pchar(listbox2.Items.Strings[i]); //Webdir:=getcurrentwb.LocationName; Filename:=ExtractURLPath(listbox2.Items.Strings[i]); Fileext:=extractfileext(listbox2.Items.Strings[i]); ziehl:=pchar(Savedir + '\' + filename{+ inttostr(i+1)'\' + webdir + + '.' }+ fileext); edt2.Text:=ziehl; URLDownloadToFile(nil, url, ziehl, 0 , CDownStatus); x:=x+1; statusbar1.Panels[3].Text:=inttostr(x)+' Datei(en) Runtergeladen'; progressbar2.Position:=y; y:=y+1; edt2.Clear; end else break; end; // Das muss auch noch rein // Frag mich nicht was was ist :-) function cDownloadStatusCallback._AddRef: Integer; begin Result := 0; end; function cDownloadStatusCallback._Release: Integer; begin Result := 0; end; function cDownloadStatusCallback.QueryInterface(const IID: TGUID; out Obj): HResult; begin if(GetInterface(IID,Obj)) then begin Result := 0 end else begin Result := E_NOINTERFACE; end; end; function cDownloadStatusCallback.OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; begin Result := S_OK; end; function cDownloadStatusCallback.GetPriority(out nPriority): HResult; begin Result := S_OK; end; function cDownloadStatusCallback.OnLowResource(reserved: DWORD): HResult; begin Result := S_OK; end; function cDownloadStatusCallback.OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall; begin Result := S_OK; end; function cDownloadStatusCallback.GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall; begin Result := S_OK; end; function cDownloadStatusCallback.OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc; stgmed: PStgMedium): HResult; begin Result := S_OK; end; function cDownloadStatusCallback.OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall; begin Result := S_OK; end; function cDownloadStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; begin case ulStatusCode of BINDSTATUS_FINDINGRESOURCE: begin form1.StatusBar1.Panels[2].Text := 'Datei wurde gefunden...'; if (usercancel) then begin Result := E_ABORT; exit; end; end; BINDSTATUS_CONNECTING: begin form1.StatusBar1.Panels[2].Text := 'Es wird verbunden...'; if (usercancel) then begin Result := E_ABORT; exit; end; end; BINDSTATUS_BEGINDOWNLOADDATA: begin Form1.progressbar1.Position := 0; form1.ProgressBar2.Max:=form1.ListBox2.Items.Count; //Form1.progressbar2.Position := 0; form1.StatusBar1.Panels[2].Text := 'Der Download wurde gestartet...'; if (UserCancel) then begin Result := E_ABORT; exit; end; end; BINDSTATUS_DOWNLOADINGDATA: begin Form1.progressbar1.Position := MulDiv(ulProgress,100,ulProgressMax); //form1.ProgressBar2.Position := MulDiv(ulProgress,100,ulProgressMax); form1.StatusBar1.Panels[2].Text := 'Datei wird heruntergeladen...'; if (UserCancel) then begin Result := E_ABORT; exit; end; end; BINDSTATUS_ENDDOWNLOADDATA: begin form1.StatusBar1.Panels[2].Text := 'Download wurde beendet...'; end; end; Application.ProcessMessages; Result := S_OK; end;
Delphi-Quellcode:
Ich hoffe, das hilft jemandem.
procedure TForm2.ButtonDLClick(Sender: TObject);
begin DL; end; |
Re: Bilder herunterladen
Suupi, ich werd damit mal rumtesten. Danke
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz