Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Letöltendő file méretének lekérdezése 2020 jún. 12 12:57 #2394

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
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
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Letöltendő file méretének lekérdezése 2020 jún. 12 09:00 #2393

  • pernyei
  • pernyei profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • In Lazarus We Trust
  • Hozzászólások: 54
  • Köszönetek: 1
Á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!

Letöltendő file méretének lekérdezése 2020 jún. 10 16:01 #2392

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
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)
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: pernyei

Letöltendő file méretének lekérdezése 2020 jún. 09 15:27 #2391

  • pernyei
  • pernyei profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • In Lazarus We Trust
  • Hozzászólások: 54
  • Köszönetek: 1
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.

  • Oldal:
  • 1