Autor Beitrag
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Sa 07.09.02 15:24 
Hi leute,

wie kann ich die Größe einer Datei, die auf einem HTTP-Server liegt, bestimmen?

_________________
Viele Grüße
Jakob
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Sa 07.09.02 15:37 
Hi,

vielleicht kannst Du ja damit etwas anfangen, da ist zumindest der Ansatz drin wie ich die Größe einer Datei erkenne.

www.swissdelphicente.../showcode.php?id=330
DeCodeGuru Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Sa 07.09.02 15:51 
super, danke :wave:

_________________
Viele Grüße
Jakob
DeCodeGuru Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mo 09.09.02 20:21 
ooops, da war ich wohl etwas zu glücklich, dass ich eine antwort bekommen habe. nun ein problem: Die Quellcodes die auf der Seite stehen können nur mit lokalen Dateien funktionieren. Ich möchte aber die größe einer Datei (z.B. www.google.de/wasweissich/irgendwas.zip) herausfinden. Solche Dateien sind halt nicht auf der lokalen Festplatte. :wink:

_________________
Viele Grüße
Jakob
M4EiB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Di 10.09.02 01:03 
die länge einer datei steht im http-header unter "Content-Length".
aufrufen tust du es am besten mit dem befehl "head". erfordert nur den http-header als antwort, bei einem normalen get würde die datei auchmitgeschickt (falls du sie sowieso downloaden willst ist das natürlich zu bevorzugen).

hier code mit der indy-http-komponente:
ausblenden Quelltext
1:
2:
idhttp1.Head('http://home.t-online.de/home/0724721978-0001/hlsw_0_4_2b_setup.exe');
 memo1.lines.add(inttostr(idhttp1.Response.contentlength));


sollte auch mit nmhttp1 gehen. dazu musst du aber die contentlength aus dem header auslesen.(wüsste nicht, dass man sie direkt auslesen kann)
DeCodeGuru Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Di 10.09.02 10:57 
hi M4EiB,

ich habs mir schon gedacht, dass das alles im Header stehen muss. Ich wollte heute eigentlich einen Http-Server schreiben, dann die Proxyeinstellungen des Browser auf meinen Server stellen und schauen, was da für Befehle ankommen. Na ja, halt keinen richtigen Server. Aber vielen Dank, hast mir ein schönes Stück Arbeit erspart.

Achja, wenn wir grade beim Thema sind und du dich so gut auskennst *gg*. Wie kann ich überprüfen, ob die Datei überhaupt verfügbar ist, also ob das nicht nur ein Fake ist?

_________________
Viele Grüße
Jakob
M4EiB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Mi 11.09.02 06:32 
hi

entweder gibts einen timeout. wenn der server gar nichts schickt.

falls er aber eine seite schickt, in der steht, dass die datei nicht existiert oder im moment nicht verfügbar ist. kannst du im header den eintrag "content-type" anschauen: bei html dateien steht da auch "Content-type: text/html". falls man eine text- html-datei download will, funzt das aber nicht.
DeCodeGuru Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mi 11.09.02 14:53 
so, ich habe jetzt ein bisschen in der PSDK gestöbert und habe mir dann nen Quuellcode erstellt, der zwar funtzt aber unendlich lahm ist. Wenn mir einer sagen könnte, was ich noch beschleunigen könnte, da wäre ich echt dankbar. So hier, ist mal der Code.

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, activex, urlmon;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  cDownloadStatusCallback = class(TObject,IUnknown,IBindStatusCallback)
  private
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
    function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
    function GetPriority(out nPriority): HResult; stdcall;
    function OnLowResource(reserved: DWORD): HResult; stdcall;
    function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; stdcall;
    function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall;
    function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall;
    function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc; stgmed: PStgMedium): HResult; stdcall;
    function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//IUnknown interface

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;

// IBindStatusCallback interface

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.Label1.Caption := 'Datei existiert';
      Result := E_ABORT;
      exit;
    end;
  end;
  //Nur so zum Aktualisierungszweck
  Application.ProcessMessages;

  Result := S_OK;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  cDown: CDownloadstatuscallback;
begin
  Label1.Caption := 'Datei existiert nicht';
  cDown := cDownloadStatusCallback.Create;
  URLDownloadToFile(nil,PChar(Edit1.Text),PChar('C:\Test.tmp'),0,cDown);
end;

end.


Also, wäre echt super, wenn jemand das ganze beschleunigen könnte. Mir fiel bis jetzt nichts auf.

_________________
Viele Grüße
Jakob
Steffer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: Mi 11.09.02 17:53 
Probier das mal..
www.faqsen.de/find.j...554850504851545355;2

bzw. hier hast du die Sache mit Progress...
www.faqsen.de/find.j...504849504849494857;2

_________________
Keine Signatur ...
DeCodeGuru Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mi 11.09.02 19:16 
hey, danke. :) Werde das morgen mal ausprobieren.

_________________
Viele Grüße
Jakob