Vanaf Access 2007 is het mogelijk om attachments toe te voegen in een tabel, ik heb een grote database van personen met foto's en wil deze graag exporteren, zodat deze gebruikt kunnen worden voor een webproject. Het is mogelijk om in Access 2007 een export te maken van deze tabel. De foto's worden dan meegenomen in de XML export. Onderstaand een voorbeeld-export van smiley.jpg, die ik als attachment heb toegevoegd in een willekeurige rij.
Het origineel van smiley.jpg kun je terugvinden op:
http://img812.imageshack.us/img812/8248/smileyq.jpg
<Foto>
<FileData>FAAAAAEAAAAEAAAAagBwAGcAAAD/2P/gABBKRklGAAEBAQBkAGQAAP/bAEMAAwIC
AwICAwMDAwQDAwQFCAUFBAQFCgcHBggMCgwMCwoLCw0OEhANDhEOCwsQFhARExQV
FRUMDxcYFhQYEhQVFP/bAEMBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIACgAKAMBIgAC
EQEDEQH/xAAbAAACAgMBAAAAAAAAAAAAAAAABgUHAQgJA//EADIQAAIABAMFBgYC
AwAAAAAAAAECAwQFEQAGEgcTFSExCBRRYYGRCSIkMkGxM3GCodH/xAAYAQADAQEA
AAAAAAAAAAAAAAAEBQgHBv/EACgRAAIBAwMDBAIDAAAAAAAAAAECEQADBAUhMQYS
QQciYYETURRxkf/aAAwDAQACEQMRAD8A6nxoyS8Mu5soxAz1VnI9xBPd4fiBdj64
KpP7+omCD8kHl/l+f+Y0T+KR2m9ofZ+puziHkKomi8Um5qPOTywEi69wIOiCdakB
W3rEjqdAF7XxmWp6te1TLOlafd7GkiZiSASdxuAIjbmjUthF73FbnzMSoKxZZ+YD
eG9NvbBI5yqFMihZ0d8l782AAdR+j6++FSo5xqSbIouaBTTxhaEakKaQf5+77zdW
6/d8vjjUT4aHaJz92gKDtAXPdQasmlzktElJ5oCQiN+IpeCNCgWTdqQOo126WxO7
6h1FgWcnWsDLITHZAwLEz3tA9pkHfmfqmwS0xW2y810ekp2DUZZJiXiCJCcXDDBh
GyZUGp1ZMizfTzNyoPQOBe/qBb2wYp/o/qW31VpKZ6jtee1x+mETHwQQR8GKS5Fk
2LhWstMlavPq33CO/tqNsQGYMv5U2nU+Xh1qj0vMsnIzpiwUqEqkwkGZguyFlDgg
OrBluPMYlNodBVp12imOslO21NLx3gsHFrjWhDC9gevPmOmKRg54idngvR80S802
zxXZqTmaWgvHh02ETcSs6FBaGqE6UjkFCmkOVZbvKGvPn4Gr5eEs/mVyVA2LKSSC
vkkggwN4mJinloK1tW8VeUaNqwq0LLGVtmdOiwKLSKZlqRnJwRIkOnyqS8OLMRWC
BmCAAszFVuevIeGIM9oHZeKXxI7RsqcP06u88altFv714Uouc37Q8SHS8tSs1D2d
7xYlUzJNQXgJU0Uhu6ySuAzo5ADx7BdGpULM2pM2/i5+QzNkq1u1PuJBA2/uAW57
V5J480Z3IONzV0St+P0zT92/T2uL/wCsGPfZ3l9EnUeFv2k5LUEaYjvGdnN+RdyW
NrnqeXIdMGK49HtOvYehXL9wELdclZ2lQAJ+yD/lIdQcNdAHgVYU9IwKlKvLzCCJ
Cccwf2PPCNUMm1Gmuxk/rZf8C4DgeYPI+ntgwY7vqjo/Sep7U56HvUbOphgOYmCC
Pggx4ihrGRcsn2mkYbI8vCrcQGz2liqatffODQt7q8d5ovfzvh5p+TajUnUzv0Uv
+VuC5HkOg9fbBgxknTvp1o2bktczGuXRb4VmEfcAGPgEUdey7irCwJp6kZGDTpVJ
eXQQ4SCwA/Z88GDBikbVpLKLatKFVRAA2AA4AH6pQSSZNf/Z
</FileData>
<FileName>smiley.jpg</FileName>
<FileType>jpg</FileType>
</Foto>
De XML-export van Access lijkt het plaatje te encoden met base64, maar zodra ik de functie base64_decode(); gebruik, komt er geen correcte output van de foto. In de XSD-file, die automatisch bij het maken van een XML export wordt aangemaakt, staat tevens het volgende:
<xsd:element name="FileData" minOccurs="0" od:jetType="oleobject" od:sqlSType="image">
<xsd:simpleType>
<xsd:restriction base="xsd:base64Binary">
<xsd:maxLength value="1476395008"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Ik heb geprobeerd om het plaatje te openen met de volgende PHP-code (waarbij $data uiteraard is gevuld met de encoded data uit de XML-export):
<?php
header('Content-Type: image/jpeg');
echo base64_decode($data);
?>
Ik heb gezocht op diverse fora, maar ik heb helaas geen oplossing kunnen vinden. Het lijkt erop dat er door Access extra code wordt toegevoegd aan het plaatje, maar het is mij onbekend hoe ik deze eruit zou kunnen filteren. Heeft iemand wellicht een idee hoe ik de encoded-data op een goede manier kan terughalen?
[size=xsmall]Toevoeging op 28/05/2011 22:14:14:[/size]
Ik wil jullie graag informeren dat ik reeds een oplossing heb gevonden via StackOverflow. Wellicht heeft er iemand in de toekomst hetzelfde probleem, het kan alsvolgt opgelost worden:
Access 2007 voegt automatisch bij het maken van de XML-export extra gegevens toe, dit zijn de eerste 20 bytes van het gecodeerde bestand. Als je deze bytes m.b.v. substr() verwijderd, dan levert het weer een correct plaatje op.
echo substr(base64_decode($data), 20);
(Topic mag gesloten worden)
1.364 views