Avatar billede KurtG Forsker
03. februar 2022 - 11:56 Der er 1 løsning

Downloadet fil er tom

Jeg har fået hjælp til at downloade et billede vha. PHP.
Billedet kan på hjemmesiden ses ved at holde musen over link og med en knap kan filen downloades.
Det virker tilsyneladende fint, men den downloadede fil er enten tom eller ødelagt.
Siden ses her:
https://www.vinderup-egnshistorie.dk/Register/visresultat2.php?gruppe=d02&innr=&omhandler=&omhandler0=&soeg=Start+s%F8gning

Koden er her:
Min fil 'visresultat2.php' indeholder dette til bl.a. download:
if (file_exists($filename))
{
  //Lav visning ved mus over link
  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;';
  //Lav download knap
  Trim($PicFile);
  echo '<a href="download.php?file='.$PicFile.'">';
  echo '<img src="dwn.ico">';
  echo '</a>';

Og filen 'download.php':
<?php
if (!empty($_GET['file']))
{
    $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);
?>

Jeg tror, at det måske er manglende header-information eller måske opsætning af browseren, men har ikke kunnet finde løsningen.
Hvad gør jeg galt.
Avatar billede KurtG Forsker
04. februar 2022 - 08:17 #1
Jeg fandt en løsning på nettet og har ændret min
download.php til:
<?php
if(isset($_REQUEST["file"]))
{
    $file = urldecode($_REQUEST["file"]); // Decode URL-encoded string
    if(file_exists($file))
    {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="'.basename($file).'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        flush(); // Flush system output buffer
        readfile($file);
        die();
    } else {
        http_response_code(404);
        die();
    }
}
?>
Det ser ud til at være en anden måde at gøre det på, men det virer.
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