Lazarus 2.0.8 (2020.04.16.)
Letöltés

file Letöltendő file méretének lekérdezése

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Letöltendő file méretének lekérdezése

Kimaradt az előző hozzászólásomból, hogy a "Content-Length" hiánya akkor nem hiba a kiszolgáló részéről ha az átvitel például kódolva történik és az állomány végleges mérete nem tudható előre.

Tipikusan ilyen a tömörített adatátvitel. A tömörített adatátvitel nem .zip vagy .rar (stb.) fájlok letöltését jelenti, hanem azt hogy az állomány az átvitel idejének csökkentése érdekében a kiszolgálón röptében tömörítésre kerül, majd az ügyfél gépén, az állomány mentése előtt, szintén röptében, kitömörítésre: "Transfer-Encoding: gzip"
Hasonló lehet a helyzet a részletekben történő átvitel esetén, ha az adatfolyam mérete a kiszolgálói oldalon előre nem tudható: "Transfer-Encoding: chunked"
Ráadásul ezek együtt is lehetségesek: "Transfer-Encoding: gzip, chunked"

Ha részletekben történik az átvitel akkor ha van is "Content-Length" fejléc, az nem a teljes állomány méretét jelenti, hanem csak az adott szeletét. Ilyenkor érdemes a "Content-Range" fejléc tartalmát elemezni, mert esetleg (de nem feltétlenül) abban lapulhat a végleges méret: "Content-Range: bytes 0-1023/4096"
Az előző fejléchez, melyben ott van, hogy az állomány végleges mérete 4096 bájt, a következő (az adott szeletre vonatkozó) méret fejléc tartozna: "Content-Length: 1024"

Lásd még:
developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests
developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding
#2394

  • pernyei
  • pernyei profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • In Lazarus We Trust
  • Hozzászólások: 54
  • Karma: 3
  • Köszönetek: 1

pernyei válaszolt a témára: Letöltendő file méretének lekérdezése

Átnéztem a response fejlécet, és nincs benne 'content-length' tartalmú rész; el tudom képzelni, hogy ez valóban szándékos a szolgáltató részéről.
Végül is együtt tudok élni a problémával, nem kritikus, a program ettől még funkcionál.
Köszönöm, hogy foglalkoztál vele!
#2393

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Letöltendő file méretének lekérdezése

HTTP protokoll esetén a válasz (response) fejlécben ott kell lennie az adott állomány hosszát ('content-length') tartalmazó mezőnek (sor). Ha nincs ilyen mező (sor) a válasz fejlécben akkor az a kiszolgáló oldal hibája vagy hiányossága (bizonyos esetekben szándékos is lehet).

Ezeket találtam hirtelen:
forum.lazarus.freepascal.org/index.php/topic,18747.msg106101.html#msg106101
wiki.freepascal.org/Synapse#Simple_version_with_progress (a példában az utolsó eljárás: THttpDownloader.GetSizeFromHeader)
#2392
Megköszönték: pernyei

  • pernyei
  • pernyei profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • In Lazarus We Trust
  • Hozzászólások: 54
  • Karma: 3
  • Köszönetek: 1

pernyei létrehozta a témát: Letöltendő file méretének lekérdezése

Sziasztok!

A programomban a laz_synapse csomag THTTPSend.HTTPMethod('GET', URL) függvényével töltök le állományokat, ez rendben van és remekül működik. De szeretném még a letöltés megkezdése előtt megtudni, hogy mekkora a letöltendő állomány mérete. Ezt hogyan tehetem meg?
(Google barátom olyan megoldást adott fel, amiben a THTTPSend.Sock.OnStatus event-re kötött procedúrában a THTTPSend.Headers tömbből kellene kiszedni ezt az adatot a GetSizeFromHeader() -rel, de ez nem működik; a Headers-t megnézve nincs is benne a file méretére utaló információ.)

Segítségeteket előre is köszönöm!
G.
#2391