Foto downloaden uit database
Ik probeer al een tijdje om een foto te downloaden uit de databse.
Als ik de foto download dan laat hij alleen een klein gedeelte van de foto zien.
Is er iemand die weet hoe dit opgelost kan worden ?
Dit is het script.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
mysql_connect ("x","x","x")or die (mysql_error());
mysql_select_db("x")or die (mysql_error());
$opdrachtid= ($_GET ['id']);
$query = mysql_query("select * FROM opdrachten_gegevens WHERE Opdracht_ID = '$opdrachtid'");
$row = mysql_fetch_assoc($query);
$test = $row["Foto"];
$naam = $row["Bestandsnaam"];
header("Content-Type: $naam");
header("Content-Disposition: attachment; filename=\"$naam\"");
print $test;
?>
mysql_connect ("x","x","x")or die (mysql_error());
mysql_select_db("x")or die (mysql_error());
$opdrachtid= ($_GET ['id']);
$query = mysql_query("select * FROM opdrachten_gegevens WHERE Opdracht_ID = '$opdrachtid'");
$row = mysql_fetch_assoc($query);
$test = $row["Foto"];
$naam = $row["Bestandsnaam"];
header("Content-Type: $naam");
header("Content-Disposition: attachment; filename=\"$naam\"");
print $test;
?>
gr
Moet het content-type in regel 11 niet iets zijn als image/jpeg of image/png?
Ja, dat klopt. $naam in regel 11 staat gelijk aan image/jpeg.
Het feit dat $naam uit het veld 'bestandsnaam' komt vind ik dan op zijn minst verwarrend. En die verwarring wordt niet weggenomen doordat je in regel 12 $naam ook weer gebruikt als filename. ;-)
Weet je zeker dat het plaatje correct is opgeslagen in de database? En als je $test niet naar het scherm schrijft maar naar een bestand op je server, krijg je dan wel een goed plaatje?
Het plaatje is opgeslagen als een blob bestand in de database.
Daar ging ik inderdaad vanuit. ;-) Maar kan het zijn dat er bij het opslaan iets mis is gegaan waardoor het plaatje is afgekapt?
nee volgens mij niet want hij doet dit bij ieder plaatje.
Maak er eens een MEDIUMBLOB van; daar kan 16 MB in. Als dat ook niet genoeg is, zou je nog een LONGBLOB (max 4 GB) kunnen overwegen. Uiteraard moet je dan wel je plaatjes opnieuw in de database laden.
Wouter van op 09/11/2014 17:24:20:
Het plaatje is opgeslagen als een blob bestand in de database.
Waarom sla je plaatjes op in een database? Sla ze, buiten de root eventueel, op en roep ze op via het pad/bestandsnaam (vanuit database).
Er kunnen verschillende redenen zijn om dat te doen.
- Als je veel kleine plaatjes hebt, is een database vaak efficiënter dan een file system.
- Een database maakt transacties en referentiële integriteit eenvoudiger, wanneer het belangrijk is dat de plaatjes en de metadata overeenkomen.
- Ook wanneer plaatjes vaak wijzigen (elke xx seconden) kan het handig zijn om ze in een database te zetten; bij een file system is de kans dan groter dat de webserver een leeg plaatje stuurt als net op dat moment het bestand wordt overschreven.
- Als meerdere mensen toegang hebben tot de server, is het eenvoudiger om permissies op de bestanden te regelen als ze in een database zitten.
- Er hoeft geen aparte backup te worden gemaakt van de plaatjes; die worden meteen met de database gebackupt.
- Als je meerdere servers hebt, is het eenvoudiger de plaatjes te repliceren naar de andere servers. Ook wanneer je geen gerepliceerde database hebt kun je op die manier de bestanden beschikbaar maken op andere servers zonder dat je met file sharing hoeft te gaan werken.
Er zijn overigens net zoveel redenen om plaatjes níet in een database te zetten. Of het voordelen heeft, moet je per geval bekijken.
Gewijzigd op 09/11/2014 22:59:16 door Willem vp
Bedankt voor de hulp!
Gr Wouter