XML-экспорт из Access 2007 (вложения base64) - PullRequest
1 голос
/ 28 мая 2011

Начиная с последних версий Access (2007/2010), можно добавлять вложения в строки. У меня есть такая база данных с участниками и их фотографиями, но я хотел бы экспортировать их (включая фотографии) и использовать их для нового веб-приложения. Я сделал экспорт XML с Access 2007. Фотографии, которые я приложил, закодированы в экспорте XML.

Ниже приведен пример файла smiley.jpg, который я прикрепил в моей базе данных в случайной строке. (Оригинальный файл smiley.jpg вы можете найти здесь: 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>

Кажется, что он закодирован с base64, но как только я пытаюсь декодировать его, используя функцию PHP base64_decode (), я не получаю верный вывод обратно. Я нашел некоторые дополнительные данные в XSD-файле, который автоматически генерируется при выполнении XML-экспорта в Access. Там это похоже на base64, так что я не знаю, что происходит не так.

<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>

Я попробовал следующий код, чтобы вернуть изображение ($ data заполнен закодированным материалом из XML-экспорта):

<?php
header('Content-Type: image/jpeg');
echo base64_decode($data);
?>

Я просмотрел несколько веб-сайтов, но не могу найти решение этой проблемы. Кажется, что Access также сжимает данные, потому что невозможно вернуть исходный файл. Я надеюсь, что кто-то на StackOverflow найдет решение этой проблемы!

Основная цель - экспортировать ок. 2500 участников (с прикрепленными фотографиями) из Access 2007. Данные можно легко экспортировать, но все дело в фотографиях, которые усложняют процесс.

1 Ответ

1 голос
/ 28 мая 2011

Кажется, что первые 20 байтов декодированного файла - это служебная информация.

Попробуйте что-то вроде этого (это не идеально, но вы понимаете идею):

echo substr(base64_decode($data), 20);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...