document uit database tonen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pipo Clown

Pipo Clown

02/03/2015 22:29:36
Quote Anchor link
Ik ben aan het proberen om een document te tonen dat in een database is opgeslagen.

Nadat er op een link geklikt is wordt er een javascript gestart dat als ingangsvariabele een id meekrijgt
Met dit id wordt in een ajax-aanroep het aplicatie type, de bestandsgrootte en inhoud van het document opgehaald.

Bij de .done van ajax wil ik het bestand tonen waarbij ik nu onderstaande code gebruik :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
  $soort = antw['soort'].split(':')[1];
  $w = window.open('data:' + $soort + ',' + antw['omvang'] + ',' + antw['inhoud']);


Wanneer ik nu de link aanklik wordt MS-Word gestart, in het document staat de bestandsgrootte.

Ik heb nu uren zitten Googlen maar krijg het niet voor elkaar om de document inhoud te tonen.

Wie helpt mij dit laatste stapje te nemen ?
 
PHP hulp

PHP hulp

21/11/2024 14:16:04
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/03/2015 00:09:20
Quote Anchor link
als je nou ergens geen ajax voor moet gebruiken dan is het wel voor het downloaden van bestanden. Probeer het maar eens zonder ajax.
Gewijzigd op 03/03/2015 00:10:19 door Frank Nietbelangrijk
 
Pipo Clown

Pipo Clown

03/03/2015 00:27:53
Quote Anchor link
Dat zou ik heel graag willen maar ik zie niet in hoe ik aan de benodigde gegevens moet komen nadat er op een link is geklikt in een HTML pagina.

Het enige dat ik heb is een ID aan de hand waarvan ik de gegevens uit een database kan halen.
Wanneer het aan mij lag zou ik het bestand zelfs niet in de database zetten maar ik kan dit niet zelf beslissen.
 
Thomas van den Heuvel

Thomas van den Heuvel

03/03/2015 00:29:21
Quote Anchor link
Je hebt echt een (binair) bestand in je database zitten? Als blob? Of als base64 geëncodeerd bestand?

Je zou met behulp van PHP dit bestand naar "output" kunnen sturen, voorzien van een of meer headers (Content-Type, Content-Length etc.), die het type bestand bevat.

inspiratie

Of ik moet je verkeerd begrijpen.
 
Pipo Clown

Pipo Clown

03/03/2015 01:00:36
Quote Anchor link
Het bestand is opgeslagen als een blob. Is nu een Word document maar kan net zo goed een PDF zijn.
Ik heb het bestands-type en de bestandsgrootte in hetzelfde record staan in de database.

Geloof het of niet maar ik ben al minstens 8 uur aan het Googlen geweest om een oplossing te vinden voor dit probleem dus een link naar Google is in dit geval even niet de oplossing denk ik.

Ik geef er de voorkeur aan om dit soort problemen "gewoon" zelf op te lossen maar in dit geval loop ik gewoon vast.
Ik ga er nog eens even over nadenken hoe ik dit verder/anders aan kan pakken.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/03/2015 01:04:15
Quote Anchor link
bestuur eerst dit voorbeeld van php.net eens.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
// We'll be outputting a PDF
header('Content-Type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>


- opslaan en naast het php bestand een pdf plaatsen. Naam wijzigen in Original.pdf en php bestand oproepen vanuit de browser.

Voila
Gewijzigd op 03/03/2015 01:07:37 door Frank Nietbelangrijk
 
Pipo Clown

Pipo Clown

03/03/2015 11:22:51
Quote Anchor link
Ik zou nog op een onclick in javascript een redirect uit kunnen voeren naar een php-script om bovenstaand uit te voeren. De enige reden om dit document in de database te zetten is veiligheid, 6 andere, minder kritische, bestanden worden gewoon in mappen opgeslagen.

Om diezelfde reden wil ik dan ook geen GET variabele mee gaan geven met de aanroep van het PHP-bestand aangezien dit te gemakkelijk gemanipulerd kan worden.

Een andere optie zie ik nog om de ID in een session-variabele te zetten, ik zie alleen niet hoe ik deze in JS kan schrijven en vervolgens in PHP uit kan lezen
 
Thomas van den Heuvel

Thomas van den Heuvel

03/03/2015 12:08:52
Quote Anchor link
Quote:
De enige reden om dit document in de database te zetten is veiligheid

Gevoelige content kun je prima in een "prive" content dir zetten buiten je webroot. Je serveert deze bestanden via een PHP-scriptje, en de administratieve informatie hiervan kun je in een database kwijt (locatie, naam, (mime)type).

Quote:
Om diezelfde reden wil ik dan ook geen GET variabele mee gaan geven met de aanroep van het PHP-bestand aangezien dit te gemakkelijk gemanipulerd kan worden.

En als je je bestanden toch via een PHP-script serveert, kun je het opvragen van een bestand ook onderwerpen aan controles zoals toegangsrechten of -rollen.
Gewijzigd op 03/03/2015 12:09:27 door Thomas van den Heuvel
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/03/2015 15:30:38
Quote Anchor link
Gewoon inderdaad je bestanden buiten de webroot plaatsen.

Database tabel aanmaken met
-id
-filename
-filetype
-roles ( Welke rol moet een gebruiker hebben om het te kunnen downloaden )

en dan kun je de pagina als hierboven aanroepen met download.php?id=2
Waarmee je dan het bestand met id 2 gaat downloaden ALS je ingelogd bent EN de juiste rol (of machtingen) hebt.

een GET var is dus prima om aan te geven welk bestand je wilt downloaden.
 
Thomas van den Heuvel

Thomas van den Heuvel

03/03/2015 15:36:46
Quote Anchor link
En een manier om in de database al te controleren of iemand de juiste rol(id's) heeft: shameless selfplug.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.