Ajax file upload, a file teljes merete feltoltes kozben
Sziasztok,
http://www.devpro.it/upload_progress/ oldalon talalhato upload progresst hasznaltam fel az oldalamon, illetve szabtam testre.
Ez egy nagyon jo kis eszkoz, de van egy hibaja: nem tudja szazalekosan kiirni a feltoltes folyamatat, annyit tud csak, hogy kiirja, hany kB toltodott fel a filebol.
Tobb ilyen upload manager forrasat megneztem, de sehogy sem tudtam rajonni arra, hogy pl. a Megaupload (http://www.raditha.com/megaupload/) honnan veszi a feltoltott file vegleges meretet.
Szoval ket oldalrol probaltam megkozeliteni a dolgot:
- a feltoltott file meretet szerveroldalon szerzem meg: az vele a baj, hogy a feltoltes alatt a tmp konyvtarban levo file meretét tudom lekerdezni, a véglegeset nem, illetve nem tudom, hogy hogyan lehetne megtudni a feltoltes kozben a vegleges meretet. Szerintem sehogy.
- a klienssel allapitom meg a feltoltott file meretét: IE ben letezik egy javascript osztaly, amivel helyi fileokat lehet kezelni, de ez FF alatt nem all rendelkezesre. Ha van egy <input type='file'> elemem, akkor a kivalosztott file meretét meg lehet tudni valahonnan?
Szoval, szerintetek hogy lehet megallapitani a feltoltott file teljes meretet _feltoltes kozben_? (tehat nem a feltoltes vegen, a $_FILES tombbol!)
■ http://www.devpro.it/upload_progress/ oldalon talalhato upload progresst hasznaltam fel az oldalamon, illetve szabtam testre.
Ez egy nagyon jo kis eszkoz, de van egy hibaja: nem tudja szazalekosan kiirni a feltoltes folyamatat, annyit tud csak, hogy kiirja, hany kB toltodott fel a filebol.
Tobb ilyen upload manager forrasat megneztem, de sehogy sem tudtam rajonni arra, hogy pl. a Megaupload (http://www.raditha.com/megaupload/) honnan veszi a feltoltott file vegleges meretet.
Szoval ket oldalrol probaltam megkozeliteni a dolgot:
- a feltoltott file meretet szerveroldalon szerzem meg: az vele a baj, hogy a feltoltes alatt a tmp konyvtarban levo file meretét tudom lekerdezni, a véglegeset nem, illetve nem tudom, hogy hogyan lehetne megtudni a feltoltes kozben a vegleges meretet. Szerintem sehogy.
- a klienssel allapitom meg a feltoltott file meretét: IE ben letezik egy javascript osztaly, amivel helyi fileokat lehet kezelni, de ez FF alatt nem all rendelkezesre. Ha van egy <input type='file'> elemem, akkor a kivalosztott file meretét meg lehet tudni valahonnan?
Szoval, szerintetek hogy lehet megallapitani a feltoltott file teljes meretet _feltoltes kozben_? (tehat nem a feltoltes vegen, a $_FILES tombbol!)
ja, es a forras
www.aer.hu/filemanager/aerFM.zip
csak 1 tipp
Nem tudod
Content-Length header
Felhő
Második mondat
7. hozzászólás ;)
Thread
továbbra is 7. hozzászólás...
...utolsó sok sor.
Felhő
file merete feltoltes kozben ... ecceru mint a pofon
Ha esetleg valaki tudna tisztan php-s megoldast, arrol szivesen hallanek.
Nem lehet...
tmp konyvtar figyelese
2 megoldás
Amúgy amit perlben lehet azt phpben is...
Fura
Amit nem értek: egyszerre mondjuk van 10 feltöltés folyamatban. Honnan lehet tudni, hogy melyiknek az adatait szeretnénk látni?
A filemérett nem próbáltam ki, de mi lenne, ha a directory információ helyett megnyitnád a filet, a végére seekelnél, majd kiolvasnád az aktuális pozíciót (elméletben).
PHP-ból nem megy...
létezik ott is megoldás
Ezenkívül pl. az is megoldás lehet, hogy a file feltöltés egy külön formban történik, aminek a célja lehet pl. egy olyan port, ami mögött mondjuk egy xinetd figyel, és átpasszolja az adatokat egy PHP-nak. Ez meg szépen a standard inputról olvassa a küldött adatokat, és szépen írja ki a fájlt, és akár közben lehet tőle kérdezgetni, hogy mennyi ment fel eddig.
Felhő
csakhogy nem eppen jo.
Szoval szerveroldalon nem lehet sajnos.
De mi a helyzet a kliensoldalon? Amikor kivalsztok egy file-t, nem lehet valahogy lekerdezni annak a meretét?
Egyebkent: a tmp/upload konyvtar melw estekben kerul torlesre? Mert azt vettem eszre, hogy sokszor bent marad a feltoltott file feltoltes utan is.
neked kéne törölni
Amúgy a másolás+törlést megoldást ajánlom a feltöltött fájlokra (persze az is_uploaded_file -al együtt). A move ugyanis nem működik különböző partíciók között, és a temp könyvtár valószínűleg máshol van, mint a webes fájlok.
B
upload progress manager
A fent említett devpro modulból és másokból összegyúrtam egy upload managert. Nem kell hozzá php patch, viszont egy getfilesize.cgi nevű kis fájlocskát el kell helyezni a cgi-bin -ben. Van benne egy minta index.php, valamint telepítési instrukciók.
Ime a blogbejegyzés
Bocs
Szóval a devpro modul nagyon jó kis eszköz, sajnos egyszerre több feltöltésnél össze tud zavarodni a tempfájlok között (szerintem ez még javítható), de az ötlet kiváló.
Amire ehhez még szükség van, az a fájlméret. Kliensből nem lehet megállapítani, el kell tehát posztolni szerveroldalra. php-nak nem adhatod, mert az nem indul el a feltöltés befejezéséig. (Nekem nincs módom patchelni - a hordozhatóság ezzel gyak. megszűnik.) Itt lép be egyébként a képbe a devpro spiritusza: külön szálban kikeresi a feltöltődő tempfájlt, s lekérdezi a méretét. Csak sajnos abból nem tudja meg, mekkora a célméret. Ez a maximum tehát, amit php-ból ki lehet hozni.).
Marad a perl. Nekem annyira tetszett a devpro, hogy azt használtam, és csak annyi cgi-beavatkozást akartam, amennyi feltétlenül szükséges: getfilesize.cgi vagy valami ilyesmi. Az elv az, hogy elposztolom neki a fájlt, várok az arany info-ra, megkapom, leállítom a posztot, s elindítom a devpro-s feltöltést immár a szükséges adat birtokában.
Egy sor perl kód: $len = $ENV{'CONTENT_LENGTH'};
Ennyi.
Ha valaki új a perlben (én is az voltam), böngéssze, vágja meg, szabja testre a megaupload szkriptjeit, meg fogja találni a releváns részt.
Kis összegzés:
- php patch:
-------------
előny: egyszerre több feltöltéssel nincs gond, és nincs cgi :)
hátrány: hack, megszűnik a kód hordozhatósága
- megaupload és tsai:
---------------------
előny: több feltöltést stabilan kezel, semmi hack.
hátrány: a feltöltés kezelését átveszi a cgi, általában túl sokat vesz ki a php kezéből.
- hibrid
--------
előnyök: A kód hordozható. Elegáns, hogy a cgi minimális szinten van segítségül hívva. A feltöltés teljesen php alapon marad, php action-nel. Az ajaxos progress visszajelzés csak plusz rétegként van jelen, működési zavarok esetén a feltöltés akkor is rendben végbemegy.
hátrány: amellett, hogy a devpro-megoldás azért egy kicsit hack (azért messze nem annyira mint egy php patch), több feltöltés esetén nem is túl stabil. Viszont szerencsére a probléma szigorúan csak a progress visszajelzésre korlátozódik, a feltöltés marad ugyanolyan stabil, mint egy szokványos php feltöltés.