Avatar billede KurtG Forsker
29. januar 2022 - 13:25 Der er 3 kommentarer og
2 løsninger

Download image i stedet for at vise filen

På en af mine sider har jeg kunnet få download til at virke med denne kode:
    echo '<a href="../Referater/';
    echo utf8_decode($filen);
    echo '">';
    echo utf8_decode($filen);
    echo '</a>';
Dette giver: "RodOgUnderdir"/referat 0210213.pdf.
Dette medfører download af filen!

Nu har jeg på en anden side forsøgt med noget lignende, nemlig:
    echo '<a href="'.$PicFile.'">';
    echo '<img src="dwn.ico">';
    echo '</a>';
Dette giver:
"RodOgUnderdir"/D01-022.jpg
Her downloades filen ikke, men vises i stedet i browseren.

Hvorfor denne forskel og hvad gør jeg for at sikre download i det sidste eksempel?
Avatar billede jakobdo Ekspert
29. januar 2022 - 14:04 #1
Avatar billede arne_v Ekspert
29. januar 2022 - 20:10 #2
Du laver et link til en fil.

Den fil serves direkte af web server d.v.s. uden om PHP.

Web server sender en content-type header til browser og udfra den beslutter browser sig for hvad den vil.

Hvis du i.s.f. laver et link til et PHP script som server en fil (baseret på filnavn i query), så kan du sætte de headere du ønsker i PHP.

I dette tilfælde noget a la:

header("Content-type: application/octet");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=\"$outname\"");
Avatar billede KurtG Forsker
30. januar 2022 - 00:15 #3
OK, det vil jeg prøve.
Men det har jeg ikke (bevidst) gjort på den side, der virker!
Avatar billede jakobdo Ekspert
30. januar 2022 - 00:35 #4
Men det er styret af din browser.
Så din browser kan frit indstilles til hvordan den skal håndtere filtyper af: X og Y.
X bliver måske vist med en browser-udvidelse direkte i browseren og andre bliver hentet ned som en download.
Men PHP koden du har fået link fra mig og direkte i input fra Arne, burde sørge for filerne altid bliver sendt som "download".
Avatar billede KurtG Forsker
31. januar 2022 - 13:02 #5
Tak for jeres hjælp.
Jeg læste det på linken, og brugte en af tipsene til at lae min fil 'Download.php'.
Så nu virker download, MEN alligevel ikke, for filen er tom eller beskadiget.
Min fil 'visresultat2.php' indeholder dette til bl.a. download:
if (file_exists($filename))
{
  echo '<a class="pup" onmouseover="loadNote(this)">';
  echo 'Vis seddel '.$pKasse.'-'.$pNr; $PicFile = 'Sedler/'.$pKasse.'/'.$pKasse.'-'.$pNr.'.jpg';
  Trim($PicFile);
  echo '<span class="note" data-image="Sedler/'.$pKasse.'/'.$pKasse.'-'.$pNr.'.jpg"></span></a>';
  echo '&nbsp;&nbsp;';
  Trim($PicFile);
  echo '<a href="download.php?file='.$PicFile.'">';
//    echo '<a href="'.$PicFile.'">';
  echo '<img src="dwn.ico">';
  echo '</a>';

Og 'download.php':
<?php
/*** download.php ***/
if (!empty($_GET['file']))
{
    // Security, down allow to pass ANY PATH in your server
    $fileName = $_GET['file'];
}
else
{    return;  }
if (!file_exists($fileName))
{
    echo 'Filen '.$fileName.' eksisterer ikke<br>';
    return;
}
header("Content-type: application/octet");
header("Content-Transfer-Encoding: binary");
header("Content-disposition: attachment; filename=" . $fileName);
?>

Kan det være headerne, der skal ændres på?

Link til siden:
https://www.vinderup-egnshistorie.dk/Register/visresultat2.php?gruppe=d02&innr=&omhandler=&omhandler0=&soeg=Start+s%F8gning

Med musen over linken vises sedlerne OK, så filen er jo nok OK!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester