6

При использовании точки доступа к данным для создания 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 возникает ошибка и картинка не отображается.

Как бы я пошел и сделал эту картинку видимой?

3 ответа3

4

URL-адрес в XML-загрузке точки доступа к данным имеет кодировку 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, чтобы иметь доступ к этому изображению.

2

Вы можете получить изображение из Exact Online по тому же защищенному каналу, который используется для API в качестве большого двоичного объекта, используя:

select httpget(pictureurl) picture
from   me

Это возвращает изображение, которое в приведенном ниже примере автоматически отображается инструментом Query Tool (50 оттенков серого дизайна):

Получить изображение BLOB-объекта

Обратите внимание, что если вы делаете много httpget , каждый из них имеет некоторые накладные расходы. Особенно при загрузке тысяч картинок, вы будете испытывать большую нагрузку на Exact Online. Делайте это только при необходимости.

В качестве альтернативы вы также можете использовать:

select *
from   exactonlinexml..items

XML API Exact Online возвращает картинку в самой полезной нагрузке, уменьшая количество циклов. Недостаток в том, что если у вас есть изображение глубиной 15.000 x 15.000 пикселей x 32, вы получите ... именно это, и оно будет огромным, великолепным и удивительным. Обратите внимание, что XML API использует HTTP-сжатие (gzip).

Преимущество URL, используемого API REST, заключается в том, что он создает миниатюру. Это создаст некоторую нагрузку на сервер Exact (я не знаю, насколько умны они и кешируются), но уменьшает сетевые ограничения. Обратите внимание, что таблицы API REST НЕ используют HTTP-сжатие, поэтому сжимаемый вывод по-прежнему требует большой полосы пропускания. Как вы можете видеть, существует множество проектных решений, которые необходимо принять и протестировать, несмотря на простоту использования SQL при больших загрузках и / или выгрузках.

Вы, вероятно, можете поиграть с размером миниатюры, как показано ниже:

Изменение размера миниатюры

0

Изображение доступно, когда вы вошли в Exact Online.

Также вы можете получить изображение, когда передадите Клятву Авторизатора в геттерном заголовке в Запросе на получение.

Когда вы используете Exact Online Client API в C #, это выглядит так:

  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();
                        }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .