Avatar billede macho Praktikant
19. september 2008 - 13:58 Der er 9 kommentarer og
1 løsning

Fil fra DB skal åbne i browservindue

Jeg har en liste af filer i en MySql DB, hvor jeg laver et link til hver enkelt fil med $_GET:

$id      = $_GET['id'];

Linket ser således ud:

<a href="download.php?id=<?=$id;?>"</a>

Det virker faktisk ganske fint, men man får hver gang en "åbn"-dialogboks op, hvor jeg enten kan gemme filen på lokalcomputeren eller åbne direkte med det program, som filen passer til; eks. åbnes .pdf-filer med Acrobat Reader.
Men hvordan laver man et link til en fil i DB, således at filen åbner direkte i browservinduet? Jeg vil gerne give brugeren 2 links til samme fil:
1. Som det er nu med "Gem som"-funktionen
2. Åbne filen direkte i browser-vinduet

mvh
Avatar billede coderdk Praktikant
19. september 2008 - 17:42 #1
Det handler basalt set, om at sætte de korrekte mimetypes/headere...

1)

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment;filename=dinfil.pdf");

2)

header("Content-Type: application/pdf");
header("Content-Disposition: attachment;filename=dinfil.pdf");
Avatar billede macho Praktikant
19. september 2008 - 18:02 #2
Tak for svaret,

Jeg har pt. følgende headers:

    header("Content-Disposition: attachment; filename=$name");
    header("Content-length: $size");
    header("Content-type: $type");

kan jeg så lave "både og" - altså både med "Gem som"-funktionen og hvor filen åbner sig?
Avatar billede macho Praktikant
19. september 2008 - 18:07 #3
De headers jeg har sat gør, at man får "Gem som"-funktionen og altså ikke hvor filen åbnes i browseren.
Jeg synes umiddelbart, at dine headers ser ud som dem jeg har pt.
Avatar billede coderdk Praktikant
19. september 2008 - 18:07 #4
Jo, du kan evt:

    if ( isset( $_GET['forcedl'] ) )
    {
        $type = 'application/octet-stream';
    }
    header("Content-Disposition: attachment; filename=$name");
    header("Content-length: $size");
    header("Content-type: $type");

og så lave et af linkene med ?id=123&forcedl
Avatar billede coderdk Praktikant
19. september 2008 - 18:21 #5
Hmm prøv at fjerne

header("Content-Disposition: attachment; filename=$name");

eller ændr den til

header("Content-Disposition: inline; filename=$name");

at åbne i browseren kræver at $type f.eks. er application/pdf
Avatar billede macho Praktikant
19. september 2008 - 18:29 #6
med dit sidste indlæg kan jeg nu åbne filen i browseren, men til gengæld får man ikke længere muligheden for at gemme filen, hvilket jeg stadig gerne vil have?

Har stadig dette i filen:

  if ( isset( $_GET['forcedl'] ) )
    {
        $type = 'application/octet-stream';
    }

samt:
header("Content-Disposition: inline; filename=$name");
Men ikke længere denne:
header("Content-Disposition: attachment; filename=$name");

Mine links:
<a href="download.php?id=<?=$id;?>&forcedl"><?=$descr;?></a>
og
<a href="download.php?id=<?=$id;?>"><?=$descr;?></a>

Hhmmm...?
Avatar billede coderdk Praktikant
19. september 2008 - 18:33 #7
Prøv

    $disp = 'inline';
    if ( isset( $_GET['forcedl'] ) )
    {
        $type = 'application/octet-stream';
        $disp = 'attachment';
    }
    header("Content-Disposition: $disp; filename=$name");
    header("Content-length: $size");
    header("Content-type: $type");
Avatar billede macho Praktikant
19. september 2008 - 18:41 #8
Sådan - super fantastisk og yeah yeah....!!!

Det virker helt perfekt - smid et svar, så du kan få din velfortjente pts.
Takker mange gange for hjælpen!
Avatar billede coderdk Praktikant
19. september 2008 - 19:11 #9
Det var så lidt :)
Avatar billede macho Praktikant
19. september 2008 - 19:57 #10
Endnu en gang mange tak... :-)
Go' weekend.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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