1

не получается поменять картинку (изображение) POI через Remote API

(edited by axch 26/06/2013 17:28:22)

Topic: не получается поменять картинку (изображение) POI через Remote API

Прошу помочь разобраться с данной проблемой. Использую собственную "обёртку" над Remote API, написанную на C# с использованием System.Net.Http и Newtonsoft.Json. У меня есть POI с такими параметрами (фрагмент результатов поиска элементов "avl_resource"):

{
...
  "items": [
    {
      "nm": "test13708777310",
      "cls": 3,
      "id": 876600,
...
      "poi": {
        "1": {
          "id": 1,
          "n": "м.Первомайская",
          "y": 55.7942939588,
          "x": 37.7969923346,
          "r": 50,
          "t": 1,
          "i": 53051,
          "e": 3126
        },
...
}

Я выполняю POST-запрос, как описано в "POIs: upload image":

URI - "https://hst-api.wialon.com/wialon/ajax.html?sid=<sid>&svc=resource/upload_poi_image&params={"itemId":876600,"poiId":1,"eventHash":"upload_poi_image.876600.1"}"

Заголовки:

Content-Type: multipart/form-data; boundary="646121ef-80e0-496a-8578-6143c5482a63"

Содержимое:

--646121ef-80e0-496a-8578-6143c5482a63
Content-Disposition: form-data; name="params"

{"itemId":876600,"poiId":1}
--646121ef-80e0-496a-8578-6143c5482a63
Content-Disposition: form-data; name="poi_dlg_props_upload_image"; filename="House1.png"
Content-Type: image/png

<binary data>
--646121ef-80e0-496a-8578-6143c5482a63--

Запрос выполняется успешно, вскоре получаю событие:

{
  "tm": 1372255838,
  "events": [
    {
      "i": -1,
      "d": {
        "hash": "upload_poi_image.876600.1",
        "error": "0"
      }
    }
  ]
}

Однако результат, наблюдаемый на карте - картинки у POI нет; более того, если была установлена картинка, то она пропадает. Формат изображения - PNG размером 32x32 (из вашей библиотеки изображений для POI). В чём может быть проблема?

2

не получается поменять картинку (изображение) POI через Remote API

Re: не получается поменять картинку (изображение) POI через Remote API

axch wrote:

В чём может быть проблема?

В прикрепляемом файле изображения. Возможно как-то не так прикреплен или не с тем именем. Просмотрите данные POST запросы которые происходят на оригинальном сервере и сравните со своими.

At the dark side of telematics...
3

не получается поменять картинку (изображение) POI через Remote API

Re: не получается поменять картинку (изображение) POI через Remote API

На данный момент с помощью Fiddler выяснил следующее. Если заголовок POST запроса содержит такой Content-Type:

Content-Type: multipart/form-data; boundary="e8266351-b3ff-4d43-b7d4-eaeac1110afe"

- будет возвращено {"error":4}

Если же поменять Content-Type на

Content-Type: multipart/form-data; boundary=e8266351-b3ff-4d43-b7d4-eaeac1110afe

- то всё хорошо и замечательно.

Похоже, дело в двойных кавычках, которыми майкрософтовский System.Net.Http.MultipartFormDataContent обрамляет значение boundary, а сервер Wialon не понимает. Согласно строгому BNF-определению из RFC 1341 двойных кавычек быть не должно, хотя в примере из того же RFC они фигурируют:

From: Nathaniel Borenstein <nsb@bellcore.com>
To:  Ned Freed <ned@innosoft.com>
Subject: Sample message
MIME-Version: 1.0
Content-type: multipart/mixed; boundary="simple boundary"

...
--simple boundary
Content-type: text/plain; charset=us-ascii

This is explicitly typed plain ASCII text.
It DOES end with a linebreak.
--simple boundary--
...

Похоже, большинство HTTP серверов терпимо относятся к налицию этих кавычек. Думаю, если уважаемые разработчики Wialon сделают так же, то программисты, использующие .Net, будут им весьма благодарны - т.к. контроля над boundary у них нет (если только не уходить на совсем низкий уровень сокетов).

4

не получается поменять картинку (изображение) POI через Remote API

Re: не получается поменять картинку (изображение) POI через Remote API

axch wrote:

На данный момент с помощью Fiddler выяснил следующее. Если заголовок POST запроса содержит такой Content-Type:

Content-Type: multipart/form-data; boundary="e8266351-b3ff-4d43-b7d4-eaeac1110afe"

- будет возвращено {"error":4}

Если же поменять Content-Type на

Content-Type: multipart/form-data; boundary=e8266351-b3ff-4d43-b7d4-eaeac1110afe

- то всё хорошо и замечательно.

Похоже, дело в двойных кавычках, которыми майкрософтовский System.Net.Http.MultipartFormDataContent обрамляет значение boundary, а сервер Wialon не понимает. Согласно строгому BNF-определению из RFC 1341 двойных кавычек быть не должно, хотя в примере из того же RFC они фигурируют:

From: Nathaniel Borenstein <nsb@bellcore.com>
To:  Ned Freed <ned@innosoft.com>
Subject: Sample message
MIME-Version: 1.0
Content-type: multipart/mixed; boundary="simple boundary"

...
--simple boundary
Content-type: text/plain; charset=us-ascii

This is explicitly typed plain ASCII text.
It DOES end with a linebreak.
--simple boundary--
...

Похоже, большинство HTTP серверов терпимо относятся к налицию этих кавычек. Думаю, если уважаемые разработчики Wialon сделают так же, то программисты, использующие .Net, будут им весьма благодарны - т.к. контроля над boundary у них нет (если только не уходить на совсем низкий уровень сокетов).

Спасибо за подробный анализ. Постараемся решить эту проблему в ближайшее время.

Alexander Adamovich
flespi
5

не получается поменять картинку (изображение) POI через Remote API

Re: не получается поменять картинку (изображение) POI через Remote API

Проблему решили. Пробуйте, должно помочь.