ugrás a tartalomhoz

Több szálon való töltésről lebeszélés

sirkalmi · 2008. Jan. 30. (Sze), 14.01
Szervusztok!

Valójában Java-ban dolgozom de tekintettel arra, hogy ez a probléma érzésem szerint platformfüggetlen illetve, hogy a Java topik majdnem halott, gondoltam itt teszem fel a kérdést.
File-ok letöltését ellenőrzötten (pl: jogosultság vizsgálat) kell végrehajtani, így nem adok közvetlen linket a filerendszerben lévő fileokra, hanem egy köztes réteg szolgálja ki azokat. Azaz nyitok egy stream-et és elkezdem belelapátolni a file-t. Nem nagy dolog. A probléma az hogy egyes böngészőbe beépülő program, pl adobe reader plugin, nem az elejétől a végéig egy menetben töltené le, hanem több szálat indítana részenként töltve le ami nem jön neki össze így elhasal a letöltés. Kérésem az, hogy lehet-e ezt valamilyen HTTP header-ben szabályozni, hogy milyen letöltési módok engedélyezettek?
Jelenleg ennyi van beállítva:
response.setContentType(contentType);
response.setContentLength(fileSize);
response.setHeader("Content-Disposition", "attachment; filename=[" + fileName + "]");

--
sirkalmi
 
1

Range

vbence · 2008. Jan. 30. (Sze), 14.17
Miért nem implementálod? A fájlokban seek-elni nem hiszem, hogy nagy wasistdas...
2

wasistdas

sirkalmi · 2008. Jan. 30. (Sze), 14.22
Valóban nem nagy wasistdas. Nem ismerem az API-t amin keresztül ez megvalósítható lenne. Mi írja le ezt? Honnan jönnek a paraméterek? Mik a nevük? Hol vagyon ez leírva?

Amúgy lehet, hogy nem is ez volt a baja. Ész nélkül beállítottam egy csomó header-t és megjavult. Most ezek vannak beállítva:
response.setContentType(contentType);
response.setContentLength(fileSize);
response.setHeader("Content-Disposition", "attachment; filename=[" + fileName + "]");
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Content-Transfer-Encoding", "Binary");
response.setHeader("Pragma", "public");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "private");
response.setHeader("Content-Description", "File Transfer");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");

--
sirkalmi
3

HTTP 1.1

vbence · 2008. Jan. 30. (Sze), 20.00
Hol máshol, mint a specifikációban:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35

Ha látni akarod, hogy működik a gyakorlatban, akkor iktass be valami loggert a kliens (Acrobat) és a szerver közé, és mindjárt meglátod, milyen fejlécekkel operál. Nem atomfizika...
4

Köszi!

sirkalmi · 2008. Jan. 31. (Cs), 18.23
Nagyon köszi a linket, ha lesz egy kis időm akkor megpróbálom! Ez alalpján nem tűnik nehéz feladatnak. Tudnál ajánlani egy kliens és szerver között figyelő progit Linuxra amivel a http kérések fejléceit lehetne debuggolni?

--
sirkalmi
5

Minimál megoldás

vbence · 2008. Feb. 1. (P), 00.41
Van egy apró programom javában, úgyhogy linuxon is. Megadod a lokál portot, ahol figyeljen és a végpontot, ahova csatlakozzon (ip, port). HTTP-nél annyi a probléma, hogy 1.1-nél a hostnév is számít, úgyogy vagy:

1) A hosts fájlodban átirányítod a vizsgálandó hostot 127.0.01-re, vagy

2) Keresel egy proxyt, azt fűzöd be, és a böngészőben meg a lokál portot adod meg, mint proxyt.

Fapados, de ha kell, dobj egy privátot, és megkapod.
6

Range header

Hodicska Gergely · 2008. Feb. 8. (P), 13.18
A Range header a fontos számodra alapvetően. Itt olvashatsz erről is: http://weblabor.hu/cikkek/allomanyokkiszolgalasaphpbol.


Üdv,
Felhő