Olen tekemässä erästä projektia PHP:llä jossa pitäisi siirtää lomakkeen kautta tiedostoja palvelimelle. Nyt vain tuli mieleen että olisko mitään vinkkiä miten tuollainen kannattaisi toteuttaa? Lähettäviä tiedostoja voi käyttäjästä rippuen olla vaikka satoja joten ei ihan houkuttele varmaan käyttäjääkään painella "Browse" painiketta niin montaa kertaa ja valita tiedostot yksitellen.
Joten onko ehdotuksia miten toteuttaisin tuon vai jääkö ainoaksi vaihtoehdoksi tuo Browsen painelu?
edit: FTP tiedostonsiirtoja ei kannata ehdottaa koska projektin pitäisi toimia ilman sitä.
Hmmm... No senhän voisi tehdä vaikka niin että käyttäjä antaa tiedostoille jonkilaisia maskeja kuten /jokin/kumma/kansio/*.*
lainaus:
Hmmm... No senhän voisi tehdä vaikka niin että käyttäjä antaa tiedostoille jonkilaisia maskeja kuten /jokin/kumma/kansio/*.*
Niinhän sen voisi mikäli olisi mahdollista? Mielestäni alla olevaan koodiin ei tuollaista maskia saa, koska Browse-nappulan takaa tuleva ikkuna ei anna valita kuin yhden tiedoston kerrallaan.
<form enctype="multipart/form-data" action="upload.php" method="POST"> Tiedosto: <input name="tnimi" type="file"> <input type="submit" value="Lähetä"> </form>
Kaikkein paras olisi jos yo. koodilla saisi esiin sellaisen ikkunan josta voisi valita kaikki tiedostot kerralla ja vain kerran tarvitsisi painaa submittia.
Enpä ainakaan minä tiedä, kuinka tuollainen olisi mahdollista. Mutta onnistuisiko niin, että käyttäjä tekee kaikista kopioitavista tiedostoista yhden zip-paketin, ja lähettää sen lomakkeen kautta palvelimelle. Tämän jälkeen skripti purkaa tiedostot palvelimelle käyttäjän hakemistoon (valmiita ratkaisuja tähän löytynee).
lainaus:
Niinhän sen voisi mikäli olisi mahdollista? Mielestäni alla olevaan koodiin ei tuollaista maskia saa, koska Browse-nappulan takaa tuleva ikkuna ei anna valita kuin yhden tiedoston kerrallaan.
No itseasiassa ajattelin että sen voisi ihan itse kirjoittaa. Tuollaisen ikkunan voisi popupeillä ja javascriptillä toteuttaa, mutta ei sekään kovin älykästä olisi. Tai toinen vaihtoehto olisi tehdä flashillä lomake josta tiedostoja voisi valita ja lähettää tiedostojen polut suoraan suoraan PHP'lle.
Voisin ehkä jossain kohtaa kokeilla tehdä tuollaisen.
lainaus:
käyttäjä tekee kaikista kopioitavista tiedostoista yhden zip-paketin, ja lähettää sen lomakkeen kautta palvelimelle.
Tätä olen ajatellut itsekin. PHP:lle on olemassa zip-paketteja lukeva kirjasto, mutta en juuri nyt muista pystyikö sillä purkamaan tiedostota. Täytyy tutkia asiaa.
No purkaminen onnistuu ainakin seuraavasti shell_exec("unzip mikalie.zip /mikalie"). En ole varma toimiiko tuo kaikkialla.
Mitenkäs olisi tämmöinen että luet kansion sisällön siististi formille, jokainen omalle rivilleen checkboxin taakse. Käyttäjä valitsee checkboxeihin siirrettävät tiedostot, ja loopissa vain kopioit (siirrät) valitut tiedostot palvelimelle.
Noin sen saisi toimimaan ilman zippiviritystä ja ilman turhaa jokaisen tiedoston kerrallaan valitsemista. Php:stä löytynee funkkari jolla tiedostot vaihtavat sijaintia käyttäjän tietämättä.
lainaus:
PHP:lle on olemassa zip-paketteja lukeva kirjasto, mutta en juuri nyt muista pystyikö sillä purkamaan tiedostota.
Sillä pystyy vain purkamaan tiedostoja. Pakkaamaan sillä ei pysty.
Ohimennen voin mainita, että pakkaaminen on mahdollista esim. tällä kirjastolla:
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/phpmyadmin/
lainaus:
Mitenkäs olisi tämmöinen että luet kansion sisällön siististi formille, jokainen omalle rivilleen checkboxin taakse. Käyttäjä valitsee checkboxeihin siirrettävät tiedostot, ja loopissa vain kopioit (siirrät) valitut tiedostot palvelimelle.
Mitenköhän ajattelit PHP:lla lukea käyttäjän kovalevyltä jotain? JavaScriptille on kyllä olemassa ActiveX-viritelmiä kovalevyn lukemiseen, mutta sen käyttäminen kysyy aina käyttäjältä lupaa. Ja nuo ActiveX hommelitkin toimivat vain IE:ssä.
lainaus:
No purkaminen onnistuu ainakin seuraavasti shell_exec("unzip mikalie.zip /mikalie"). En ole varma toimiiko tuo kaikkialla.
Tuo tapa ei toimi läheskään kaikkialla. Ensinnäkin Safe Mode ei saa olla päällä, mikä tiputtaa jo aika suuren osan palvelimista pois pelistä.
Ei taida olla html:ässä mahdollisuuksia tähän koska sitä ei ole tarkoitettu siirtämään tiedostoja.
Taitaa jäädä mahdollisuudeksi ftp tai tuo zippaus.
Rupesi kiinnostamaan Geocities-sivutilaa joskus käyttäneenä, siellähän on sellainen monen tiedoston yhtäaikainen lataus toteutettu monella tiedosto-kentällä. HTML-lähdekoodista voisi ohimennen vilkaista, löytyisikö vastaus sieltä. Toki kysymyksessä voi olla jokin ASP- tai vastaava viritys...
lainaus:
Rupesi kiinnostamaan Geocities-sivutilaa joskus käyttäneenä, siellähän on sellainen monen tiedoston yhtäaikainen lataus toteutettu monella tiedosto-kentällä.
Kyllä tämän tiedän ja olen sen jo toteuttanutkin niin, että yksittäisiä tiedostoja voi lähettää enintään 10 kpl. ja isommat määrät sitten zip-paketissa. Yksittäisten tiedostojen lähetyslomake on tällainen: http://www.saunalahti.fi/~trinit/tero_pietila/
ZIP-paketin lähetys- ja purkutoimintoja en ole vielä ehtinyt tekemään.
Niin tuohan on juuri se mitä ei haluttu, mutta parempi odotella jotain muuta tai käyttää esim javaa jos siinä tälläinen on.
Aihe on jo aika vanha, joten et voi enää vastata siihen.