[PHP] Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Flyde, 2. August 2010 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 2. August 2010
    Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    Hi,

    ich bin gerade dabei ein uploadscript zu verfeinern und will dafür sorgen, dass es einzigartige dateinamen gibt, damit sich die gleiche datei nicht überschreibt falls man sie 2x hochlädt

    Funktioniert so weit.. vorweg erstmal meine Sturktur:

    Codierung
    PHP:
    function  GetFileType ( $filename )
    {
        
    $str  explode ( "." $filename );
        return 
    $str [ count ( $str )- 1 ];
    }

    //define a full file path´
    $encodedname  md5 ( time ());  // timestamp in md5
    $uploadfile  $uploaddir  $encodedname  "."  GetFileType ( $file [ 'name' ]);  // Dateiendung anhängen

    while( file_exists ( $uploadfile )) {  // Falls datei doppelt...
        
    $encodedname  md5 ( time ());  // ... verschlüssel erneut
        
    $uploadfile  $uploaddir  $encodedname  "."  GetFileType ( $file [ 'name' ]);
    }
    das "getfiletype" hab ich nur für die .txt, .pdf, .xyz etc. gemacht

    in der datenbank habe ich:
    - Pfad (uploads/[Zugehoerigkeit]/[id]/[codierten_filename].[type]
    - Tatsächlichen Dateinamen (meine_datei.txt)

    Wenn ich jetzt die files in einer Table ausgeben lasse, hab ich als ausgabe dann quasi den richtigen filename aber beim öffnen den verschlüsselten, wie könnte ich den beim runterladen wieder abändern?
     
  2. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    Du könntest, wenn ein Download angefragt wird, die Datei in einen temporären Ordner kopieren, in dem sie den originalen Namen hat, oder?
     
  3. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    Wäre es nicht einfacher, wenn du einfach für jede Datei einen einzelnen, einmaligen Ordner erstellst und dann darin die Datei mit originalem Namen gespeichert wird? Weil wenn du's mit Zwischenspeicher macht, könnt ich mir vorstellen, dass es extrem viele Ressourcen fressen wird.
     
  4. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    gib die datei über php aus, da kannst du den namen selber angeben.

    PHP:
    header ( 'Content-Disposition: attachment; filename="asdf.pdf"' );
     
  5. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    ich speichere nicht zwischen jede datei gibt es 1x, einmalig codiert und in der datenbank abgelegt, über meine ordnerstruktur weiß die datenbank welche datei zu welcher person/objekt gehört

    ach meinst du in etwa so?

    HTML:
    <a href="file.php?id=10&zugehoerigkeit=objekt_xyz">MeineDatei.jpg</a>
    PHP:
    //file.php
    // do sth.
    das filename="asdf.pdf" ist, ist mir dann klar.. nur wie sag ich ihm über header()
    Code:
    e12fbbb95170cbe02a977358ac9f3bf4.pdf => download als "asdf.pdf"
    ?

    hab da in dem thema so meine lücken :S
     
  6. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    Würde das auch so machen wie Murdoc das schon gepostet hat..

    PHP: header - Manual

    Da bei Beispiel #1 steht das so, wie er es meint..

    PHP:
    <? php
    // Du sagst dem Browser, dass eine PDF-Datei gesendet wird..
    header ( 'Content-type: application/pdf' );

    // Die Datei heißt beim User dann downloaded.pdf
    header ( 'Content-Disposition: attachment; filename="downloaded.pdf"' );

    // obwohl sie auf dem Server als original.pdf liegt
    readfile ( 'original.pdf' );
    ?>
    MfG
     
  7. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    klappt, thx aber um das fenster (download.php bei aufruf des links href="download.php?id=10") komm ich wohl nicht rum, oder?
     
  8. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    Kannst es ja auch per Javascript schließen lassen:

    window.close();
     
  9. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    Von was für einem Fenster redet ihr?

    Wenn du dir ein Link machst '<a href=''...>download</a>' dann klickst du auf Download und nur ein Downloadfenster erscheint. Du bleibst ja auf der tatsächlichen Seiten wo du auf den Downloadlink geklickt hast.. Das Fenster soll sich schließen?
     
  10. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    bei <a href="abc.txt">test</a> kein fenster bzw. browserabhängig öffnet er die txt
    bei <a href="download.php?file=abc.txt">test</a> ein fenster about:blank und er downloaded die datei


    hab ich gemacht, hat er nicht drauf reagiert..

    PHP:
    <? php
    ob_start
    ();

    include(
    "_mysql_connect.php" );

    $ds  $objDb -> Query ( "SELECT * FROM dokumente WHERE iddokumente = " . $_GET [ 'id' ]);
    foreach(
    $ds  as  $file )
    {
        
    $fn  $file [ 'Titel' ];
        
    $rf  $file [ 'Pfad' ];
    }

    header ( 'Content-Disposition: attachment; filename="' . $fn . '"' );

    readfile ( $rf );
    ?>
    <script type="text/javascript">
        window.close();
    </script>
    #

    edit: außerdem muss man da eh n confirm bestätigen.. extren unelegant und will ich nicht
     
  11. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    HTML:
    <a href="download.php?file=abc.txt" target="_self">test</a>
    Dann sollte er kein neues fenster öffnen!
     
  12. 2. August 2010
    AW: Bei upload codierten dateinamen / bei download tatsächlichen dateinamen

    aua... ok, die target="_self" frage war peinlich ^^
    close, alles sauber
     
  13. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.