如何从 Exact Online XML 源获取 PictureURL 以使用 Invantive 数据访问点显示图片?

如何从 Exact Online XML 源获取 PictureURL 以使用 Invantive 数据访问点显示图片?

使用数据访问点生成 XML 提要时,使用以下查询:

select * from exactonlinerest..items

生成的 XML 有一个 PictureURL:

https://start.exactonline.nl/docs/SysImage.aspx?Table=Items&ID=3332e277-ba03-420e-84ce-21ac174c5ced&ThumbSize=500&NoCache=1&OptimizeForWeb=1&_Division_=875673

但是当尝试打开 URL 时,会出现错误,并且不会显示图片。

我该如何做才能让该图片可见?

答案1

您可以通过与 API 相同的安全通道以 blob 形式从 Exact Online 检索图片,方法如下:

select httpget(pictureurl) picture
from   me

这将检索图片,该图片在下面的示例中由查询工具自动呈现(50 种灰色设计):

检索图片 blob

请注意,如果您执行大量操作httpget,则每次操作都会产生一些开销。 尤其是下载数千张图片时,Exact Online 会承受大量负载。 仅在必要时执行此操作。

或者,您也可以使用:

select *
from   exactonlinexml..items

Exact Online 的 XML API 会在有效负载本身中返回图片,从而减少往返次数。缺点是,如果您有一张 15.000 x 15.000 像素 x 32 深度的图像,您将得到... 正是如此,而且它非常大、很棒、令人惊叹。请注意,XML API 使用 HTTP 压缩(gzip)。

REST API 使用的 URL 的优点是它会创建缩略图。这会给 Exact 服务器带来一些负载(我不知道它们是否缓存以及如何智能缓存),但会减少网络限制。请注意,REST API 表不使用 HTTP 压缩,因此可压缩输出仍然需要大量带宽。如您所见,尽管 SQL 易于使用,但在进行大量下载和/或上传时,仍需要做出和测试许多设计决策。

您可以调整缩略图大小,如下所示:

更改缩略图大小

答案2

数据访问点的 XML 下载中的 URL 是 XML 编码的,这意味着一些具有特殊含义的字符已被替换为其编码变体。(如&-> &)。

您必须将 URL 解码(有很多在线工具可用,也可以通过一些代码解码,具体取决于所使用的编程语言)。对于您的 URL,解码后的版本如下:

https://start.exactonline.nl/docs/SysImage.aspx?Table=Items&ID=3332e277-ba03-420e-84ce-21ac174c5ced&ThumbSize=500&NoCache=1&OptimizeForWeb=1&_Division_=875673

顺便说一下,您必须登录 Exact Online 的网络界面才能访问该图像。

答案3

当您登录 Exact Online 后即可看到该图片。

您还可以在 Get 请求中的标头中传递宣誓授权持有者来检索图片。

当您在 C# 中使用 Exact Online Client API 时,它看起来像这样:

  using (var stream = client.GetAttachment(PictureUrl))
                        {
                            int ReadByte = stream.ReadByte();
                            List<byte> readlist = new List<byte>();

                            while (ReadByte >= 0)
                            {
                                readlist.Add((byte)ReadByte);
                                ReadByte = stream.ReadByte();
                            }
                            downloadData = readlist.ToArray();
                        }

相关内容