[php] tijdelijke afbeelding met base64 tonen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil het volgende:

Iemand die een afbeelding upload,
krijgt deze te zien. Maar hierbij wordt alleen het tijdelijke bestand getoond en wel middels base64 encoding.

Dit wil ik zo even laten doen, omdat ik voor de koppeling straks naar een ander systeem base64 encoding nodig heb. Hiermee wil ik dus testen of een afbeelding ook inderdaad goed getoond wordt.

Ik heb nu de onderstaande code,
maar als ik een bestand upload (image) dan lijk ik in een loop terecht te komen.

Iemand enig idee?!

bestand1:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Vitrine.be - testomgeving</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="verwerken.php" method="post" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>


bestand2:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
error_reporting(E_ALL);
$size       = 0;
$imgcode    = "";
$file       = "";
if(array_key_exists("file", $_FILES)) $uploadfile      = $_FILES["file"]["tmp_name"];
if(array_key_exists("file", $_FILES)) $uploadfile_name = $_FILES["file"]["name"];
if(file_exists($uploadfile)){
   # Afbeelding (tijdelijk bestand!) tonen op scherm
   $fd   = fopen($uploadfile, "rb");
   $size = filesize($uploadfile);
   $c    = substr($uploadfile_name, strrpos($uploadfile_name, ".") + 1);
   $cont = fread ($fd, $size);
   fclose ($fd);
   $encimg  = base64_encode($cont);
   $imgcode = chunk_split($encimg);
   header("Content-type: image/$c");
   header("Content-length: $size");
   echo base64_decode($imgcode);
}

[ Voor 44% gewijzigd door Verwijderd op 03-02-2003 17:22 . Reden: code van bestand2 bijgewerkt ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

k heb nu de onderstaande code,
maar als ik een bestand upload (image) dan lijk ik in een loop terecht te komen.
Wat gebeurt er precies? Errors? probeer het nogeens zonder de Headers te schrijven

Verder heb je een mooie functie:
is_uploaded_file()

En het slaat nergens op om Losse variabelen tussen quotes te zetten!

[ Voor 48% gewijzigd door thomaske op 03-02-2003 17:11 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
"dat slaat nergens op..." -> Heeft in dit geval niets te maken met de werking.
En ik ben bezig met wat te testen ... dus dat heeft geen nut om te noemen.
Maar ok ...

is_uploaded_file ---> is niet nodig, want alles wordt al gecontroleerd.
Ik doe het op deze manier en dat is ook goed.

Maar ik waardeer je hulp wel hoor :P :)

Er gebeurt precies wat ik zeg:

ik zou de image moeten zien (moet worden getoond), maar
er gebeurt niets, de pagina blijft maar laden.

gebruik ik geen headers en laat ik $imgcode zien, dan zie ik
gewoon keurig de base64 code van het plaatje!!!

[ Voor 6% gewijzigd door Verwijderd op 03-02-2003 17:17 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Al eens op een andere browser geprobeerd, of geprobeerd het bestand op schijf op te slaan? Waarom denk je trouwens dat er een geldig plaatje op het scherm gaat komen, als je de Base64-codering terugstuurt in plaats van de binaire data? Moet je dan niet teminste de content-encoding daarop instellen, als de browser dat al ondersteund?

[ Voor 60% gewijzigd door Soultaker op 03-02-2003 17:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee dat nog niet eerlijk gezegd ... ga ik eens doen ... maar hij moet perse onder IE werken.
Met error_reporting(E_ALL); krijg ik ook geen meldingen of zo.

Dat was een goede ...
Met Netscape krijg ik nu een foutmelding:
The image could not be displayed because it contains errors.

Nu moet ik dus alleen zoeken wat er fout gaat met de encoding.
Ideeen?!

[ Voor 40% gewijzigd door Verwijderd op 03-02-2003 17:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Soultaker: http://php.holtsmark.no/base64img/
Hier doen ze dat ook ... hoort gewoon te werken hoor.
PHP parsed toch die base64 coded data?!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heel vaag,
Nu werkt het onder Netscape wel (aan het bovenstaande script heb ik NIETS veranderd!), maar onder IE krijg ik de een "opslaan als ..." window te zien! Enig idee iemand?!

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Verwijderd schreef op 03 February 2003 @ 17:16:
is_uploaded_file ---> is niet nodig, want alles wordt al gecontroleerd.
Ik doe het op deze manier en dat is ook goed.
Sjah, als ik zou mogen kiezen tussen een mooie functie of drie regels met vage en relatief zware array-functies... :)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja daar heb je gelijk in, maar ik probeer het even met deze code ...
Daarna kan ik het weer mooier, sneller maken etc.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 04 februari 2003 @ 09:13:
Heel vaag,
Nu werkt het onder Netscape wel (aan het bovenstaande script heb ik NIETS veranderd!), maar onder IE krijg ik de een "opslaan als ..." window te zien! Enig idee iemand?!
content-type is verkeerd

gebruik getimagesize om type plaatje te bepalen!

[ Voor 10% gewijzigd door LuCarD op 04-02-2003 14:46 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

De mimetype van je file staat ookal in:

PHP:
1
$_FILES['file']['type']


PS. En als je het strax allemaal mooi en sneller gaat maken, dan kan je ook de filesize uit je $_FILES array halen ($_FILES['file']['size'])

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
en nu werkt het inderdaad ... vertrouw dus nooit op een voorgekauwd script :)

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

thomaske schreef op 04 February 2003 @ 15:52:
De mimetype van je file staat ookal in:

PHP:
1
$_FILES['file']['type']


PS. En als je het strax allemaal mooi en sneller gaat maken, dan kan je ook de filesize uit je $_FILES array halen ($_FILES['file']['size'])
Dat is de content type die de browser doorgeeft. En dat hoeft dus niet de echte content type te zijn.

Programmer - an organism that turns coffee into software.

Pagina: 1