Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ladattavien tiedostojen uudelleen nimeäminen?

Sivun loppuun

Kermakana [18.09.2007 12:01:35]

#

Elikä jos sivuilla on tiedostojen uploadaus, jonka yhteydessä tallennetaan tiedoston alkuperäinen nimi tietokantaan, ja uploadattu tiedosto nimetään järjestysnumerolla ykkösestä eteenpäin.

Miten onnistuisi että kun vaikka tiedostoa 142 ladataan, se nimettäisiin automaattisesti sen nimiseksi kuin kannasta löytyy?

Lebe80 [18.09.2007 12:56:31]

#

mysql_insert_id();

ja move_uploaded_file:llä "nimetä tiedosto".


Miksi muuten näin tehdään? Numerojärjestyksessä nimeäminen mahdollistaa periaatteessa "tietoturvariskille", koska pienellä skriptillä voi tällöin ladata kaikki tiedostot helposti (sikäli mikäli joukossa on tiedostoja, jotka eivät näy muille käyttäjille).

Itse upload-vaiheessa siivoisin tiedoston nimen, tarkistaisin saman nimisen tiedoston varalta ( siirtäisi tiedoston) ja tallentaisin vaan kantaan tiedoston nimen (+osoitteen, jos useita hakemistoja), jolloin tiedoston nimi kertoisi minullekin jotain, ilman että sitä pitää tarkistaa kannasta.

Kermakana [18.09.2007 15:12:32]

#

Taisin selittää hieman huonosti, no yritetään uudelleen.

Siis uudelleen nimeäminen tiedoston lataus vaiheessa, ei lähetyksessä. Esim. sivulla on linkki tiedostoon, kun hiiren vie linkin päälle, tilarivillä lukee jotain "http://www.sivu.com/tiedostot/27.file", kun siitä klikkaa, latausikkunassa lukee tiedoston alkuperäinen nimi, vaikka "bananas.jpg".

Tämmöinen vaiva sen vuoksi, että sivulla jolle tämä tulisi, olisi suuri mahdollisuus että uploadattavat tiedostot ovat samannimisiä, siksi niiden nimet otettaisiin talteen tietokantaan ja itse tiedostot muutettaisiin pelkiksi numeroiksi joiden mukaan nimet haetaan latausvaiheessa. Kaikki nämä tiedostot olisi kanssa vapaasti ladattavissa, niin tuosta 'tietoturvariskistä' ei olisi kuin haittaa haksorille.

Lebe80 [18.09.2007 15:33:34]

#

Siltikin uskoisin että http://www.sivu.com/tiedostot/opinnaytetyo-masiinan-kokoaminen-3.rtf kertoo enemmän lataajalle kuin 27.file.

tsuriga [18.09.2007 16:07:37]

#

Joku download.php, joka ottas osoiteriviltä ID:n, hakis kannasta oikean tiedostonimen, ja ohjais käyttäjän tuonne tiedostoon.

Kermakana [19.09.2007 14:38:29]

#

Melkein kuin tsuriga sanoi, viimeisessä kohdassa vain epäselvyyttä. Eihän siis pidä uudelleenohjata mitään, vaan se käyttäjän klikkaama tiedosto nimettäsiin uudelleen.

Alkaa kyllä vaikuttamaan mahdottomalta. Otan vastaan myös ehdotuksia, mitä avuksi, jos haluan että käyttäjät voivat lähettää tiedostoja ja ladata ne samannimisinä kuin lähettivätkin, ilman että tulee ongelmia tiedostonimien kanssa.

Blaze [19.09.2007 16:17:44]

#

Ensimmäisenä tulis mieleen, että otetaan se alkuperänen tiedostonimi ja pökätään joku (esim. kellonajasta muodostettu) uniikki ID perään.

Lebe80 [19.09.2007 16:20:08]

#

Kermakana:

Siis missä on ongelma? Etkö saa kopioitua tiedostoja palvelimelle? Etkö osaa nimetä niitä?

Oletko tehnyt jo jotain koodia, missä teet noita asioita vai onko vasta suunnitteluasteella?

Laita koodia kehiin, jos on jo jotain valmista niin katsotaan porukalla yhdessä.

Kermakana [19.09.2007 16:52:38]

#

Lebe:

Tämä tulisi siis projektiini, jossa voi mm uploadata pelin replay tiedostoja, joita muut voivat ladata ja katsoa.
Olen jo tehnyt upload scriptin joka toimii ok, mutta nyt myöhemmin tuli mieleen tämä ongelma, eli on suuri mahdollisuus että uploadattavat tiedostot on samannimisiä, mutta silti eri tiedostoja.
Ensin muutin upload scriptin nimeämään replayt numeroiksi, mutta se ei taas olisi hirveän mukavaa näitä tiedostoja lataavalle, koska ne joutuu aina nimeämään itse käsin uudestaan että niitä pystyy käyttämään.

Eli siis jotenkin pitäisi saada lähetysvaiheessa tallennettut tiedostonimet noiden palvelimella olevien 1, 2, 3, 4.. filujen tilalle kun niitä ladataan.
Esim. <a href="tiedostot/124.file">replay2.rep</a> <- tuosta kuin painaisi, niin 124.file onkin latausikkunassa replay2.rep niminen.

(tiedän että olen huono selittämään :q)

Metabolix [19.09.2007 17:05:02]

#

<?php
# <a href="lataa.php?id=123">
$id = $_GET['id'];
$file = hae_tiedoston_nimi($id); # Tai suoraan vaikka "{$id}.file"
$name = hae_tiedoston_alkuperainen_nimi($id);

header("Content-type: text"); # tai mikä lie
header("Content-Disposition: attachment; filename=\"{$name}\"");
readfile($file);
?>

Jos tiedoston tallennusnimen saa näppärästi numerosta suoraan, riittää, että pidät vaikka toisessa tiedostossa numeroa vastaavalla rivillä tiedoston alkuperäistä nimeä.

Legu [19.09.2007 17:05:48]

#

<?php
//vaikka download.php, tänne ei muuta tulostusta, kuin se tiedosto!

// kerrotaan selaimelle, että halutaan ladata tiedosto, (vaikka nyt ohjelma)
header('Content-type: application/octet-stream');
// ja tallentaa se nimellä oikeanimi.rep
header('Content-Disposition: attachment; filename="oikeanimi.rep"');
// tähän se tiedoston tulostus, sovitaan vaikka että 123.file
readfile('123.file');
?>

Tulikin sama jo yllä ^^

Kermakana [19.09.2007 21:15:39]

#

Kovin erinomaista!

Kiitos Metalle ja Legulle, juuri tätä ajoin takaa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta