从 Access 2007 导出 XML(base64 附件)
Posted
技术标签:
【中文标题】从 Access 2007 导出 XML(base64 附件)【英文标题】:XML-export from Access 2007 (base64 attachments) 【发布时间】:2011-05-28 19:17:19 【问题描述】:从最新版本的 Access (2007/2010) 开始,可以向行添加附件。我有这样一个包含成员及其照片的数据库,但我想导出它们(包括照片)并将它们用于新的 Web 应用程序。我使用 Access 2007 进行了 XML 导出。我附加的照片在 XML 导出中进行了编码。
请在下面找到文件笑脸.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
zxXZqTmaWgvHh02ETcSs6FBaGqE6UjkFCmkOVZbvKG***4Gr5eEs/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 文件中发现了一些额外的数据,这些数据是在 Access 中进行 XML 导出时自动生成的。那里似乎是指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也在压缩数据,因为不可能取回原始文件。我希望 *** 上有人能解决这个问题!
主要目标是出口大约。来自 Access 2007 的 2500 名成员(附有照片)。数据可以轻松导出,但所有照片都使数据变得复杂。
【问题讨论】:
您是否知道附件字段数据类型被添加到 ACCDB 格式是为了与 Sharepoint 兼容而没有其他原因?如果你会编程,你真的不应该依赖这样的多值字段,因为它只会妨碍处理数据。由于您没有使用 Sharepoint,因此根本没有理由使用附件字段。另外,将二进制文件存储在数据库中通常不是一个好主意。 【参考方案1】:看起来,解码文件的前 20 字节是一些服务信息。
尝试这样的事情(这并不理想,但你理解这个想法):
echo substr(base64_decode($data), 20);
【讨论】:
您好,非常感谢您提供的解决方案,我刚刚尝试了几张图片,效果非常好!我已经在这个问题上工作了好几个小时,所以我很高兴你找到了完美的解决方案! 嗨,我想从 2007 年的 access db 中导出数据,每条记录都有照片,并使用 unixODBC 和 PHP 现在我可以获取数据但无法获取照片,我的问题是如何以xml格式从access中导出数据?以上是关于从 Access 2007 导出 XML(base64 附件)的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式执行 Access 2007 报告并将该报告导出为 PDF?
通过 VBA 自动使用查询从 Ms Access 2007 生成报告
如何在 Access2007 中使用基于 Visual Studio (2008/2010) 构建的 XML Web 服务