Преобразование типа данных HTTP

Интерфейс MATLAB® HTTP автоматически преобразовывает типы данных, используемые в сообщениях HTTP к и от типов MATLAB.

Преобразование данных в сообщениях запроса

При отправке сообщения с полезной нагрузкой присвойте данные MATLAB свойству Data в объекте MessageBody, затем отправьте его как свойство Body в объекте RequestMessage. Тип ваших данных MATLAB зависит от Типа контента HTTP сообщения. Если вы не задаете Тип контента, то MATLAB принимает значения Типа контента, как описано в Типе контента, Не Заданном.

Эта таблица показывает, как MATLAB преобразовывает Data в полезную нагрузку в сообщении запроса на основе свойств типа/подтипа и атрибута набора символов, что вы задаете в поле заголовка Типа контента. Символ звездочки (*) означает любой подтип.

ContentType

Тип MATLAB в свойстве MessageBody.Data

application/json

Data, преобразованный в значение Unicode® с помощью функции jsonencode. MATLAB затем использует функцию unicode2native, чтобы преобразовать значение в uint8, на основе атрибута набора символов в поле заголовка Типа контента.

Если вы уже JSON-закодировали текст, то присваиваете текст свойству Payload вместо свойства Data. MATLAB преобразовывает значение в uint8 с помощью атрибута набора символов.

Если атрибут набора символов не задан, то значением набора символов по умолчанию является UTF-8.

text/* для любого подтипа кроме csv или xml

Если Data является символьным массивом или массивом строк или массивом ячеек из символьных векторов, MATLAB изменяет и конкатенирует текст строкой, чтобы сформировать вектор.

Если Data является каким-либо другим типом, MATLAB преобразовывает Data с помощью функции string. Получившая строка преобразована в uint8 на основе набора символов.

Если вы не задавали набор символов, значение по умолчанию зависит от подтипа. Для следующих подтипов значением по умолчанию является UTF-8:

  • json

  • jtml

  • javascript

  • css

  • calendar

Для всех других подтипов MATLAB определяет набор символов. Если все символы находятся в области значений ASCII, то набором символов является US-ASCII. В противном случае набором символов является UTF-8.

Примечание

Серверы не могут правильно интерпретировать типы текстов, закодированные как UTF-8 без явного набора символов UTF-8. Для лучших результатов явным образом задайте UTF-8, если ваши данные содержат символы non-ASCII.

image/*

Data должен быть данными изображения в форме, приемлемой для функции imwrite. Преобразование Data к uint8 зависит от подтипа. Для получения информации о поддерживаемых типах и для управления преобразованием, смотрите Поддерживаемые Подтипы Данных изображения.

Чтобы управлять преобразованием ваших данных изображения или заменить тип преобразования на основе подтипа, задайте дополнительные аргументы к imwrite с помощью массива ячеек. Если вы задаете аргумент формата изображения (fmt), то он заменяет преобразование по умолчанию.

Например, следующий код преобразовывает imageData в JPEG с качеством сжатия 50 и отправляет данные в заданный url с набором Типа контента к "image/jpeg".

body = MessageBody({imageData,'jpg','Quality',50});
req = RequestMessage('put',ContentTypeField('image/jpeg'),body);
resp = req.send(url);
  • application/xml

  • text/xml

Если Data является XML DOM в форме Java® org.w3c.dom. Объект документа, MATLAB преобразовывает его с помощью функции xmlwrite.

Если Data является строкой или вектором символов, MATLAB преобразовывает его в uint8 с помощью заданного набора символов. Если не заданный, значением набора символов по умолчанию является UTF-8.

applicaton/x-www-form-urlencoded

Если Data является вектором объектов matlab.net.QueryParameter, то MATLAB преобразовывает его в закодированную URL строку. Если это - строка или вектор символов, это оставлено без изменений.

audio/*

Data должен быть аудиоданными в форме, приемлемой для функции audiowrite. Создайте массив ячеек, содержащий матрицу m на n аудиоданных и уровня выборки в Гц. Можно задать дополнительные аргументы к audiowrite путем добавления аргументов пары "имя-значение" массиву ячеек.

MATLAB поддерживает следующие аудио типы:

  • audio/x-wav

  • audio/wav

  • audio/mp4

  • audio/vnd.wav

  • application/ogg

  • audio/flac

  • application/csv

  • text/csv

  • application/vnd.openxmlformats-
    officedocument.spreadsheetml.sheet

  • application/vnd.ms-excel

Data должен быть таблицей в форме, подходящей для функции writetable.

Для подтипов csv MATLAB преобразовывает Data в разделенный текст запятой с помощью заданного набора символов. Набором символов по умолчанию является US-ASCII.

Для других типов MATLAB преобразовывает Data в данные об электронной таблице Excel®.

Чтобы задать дополнительные аргументы пары "имя-значение" writetable, создайте массив ячеек, содержащий Data и дополнительные аргументы. Если вы задаете аргумент 'FileType', тот тип должен быть сопоставим с подтипом, который вы задаете.

Тип контента, не заданный

Если вы не задаете поле Content-Type в сообщении запроса, MATLAB присваивает тип, подтип и набор символов на основе типа свойства Data. Это принятое поведение не может привести к Типу контента, который вы предназначили или можете не определить тип, таким образом, для лучших результатов, задайте Тип контента. Следующая таблица описывает принятый Тип контента на основе Data. Типы, не перечисленные, могут быть обработаны, но поведение для не включенных в список типов, как гарантируют, не останется то же самое в будущих релизах.

Тип свойства MessageBody.Data
Тип контента, не заданный

Получившийся тип контента

строка
массив символов
массив ячеек из символьных векторов

text/plain

таблица

text/csv

вектор ячейки, первый элемент которого является таблицей

text/csv — Если FileType является csv, то существует имя, пара значения в векторе со значением 'FileType','csv' или нет такой пары.

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet — Если FileType является spreadsheet.

org.w3c.dom.Documentapplication/xml
Вектор uint8

Чтобы отправить вектор uint8 без преобразования и игнорирования поля заголовка Типа контента, установите свойство Payload вместо Data.

Чтобы отправить символьно-ориентированные данные без преобразования, используйте функцию unicode2native. Эта функция использует атрибут набора символов, чтобы преобразовать Data в вектор uint8.

Если тип не является одним из перечисленных в таблице, то MATLAB определяет, является ли это одним из следующих символьно-ориентированных типов:

  • text/*

  • любой тип с набором символов

  • application/*javascript

  • application/vnd.wolfram.mathematica.package

MATLAB преобразовывает эти типы в строку, с помощью набора символов, если задано, или US-ASCII для text/plain, UTF-8 для типов приложения и кодирования MATLAB по умолчанию для других типов.

Преобразование данных в ответ обменивается сообщениями

При получении сообщения с полезной нагрузкой MATLAB преобразовывает входящий поток байтов (свойство MessageBody.Data) к соответствующему типу MATLAB.

Следующая таблица является списком Типов контента, которые MATLAB распознает в сообщении ответа, основывал свойства типа/подтипа и атрибут набора символов в полученном поле Content-Type. MATLAB преобразовывает данные, только если свойство HTTPOptions.ConvertResponse верно, который является значением по умолчанию. В таблице символ звездочки (*) означает любые символы.

Тип контента сообщения ответаТип MATLAB в свойстве MessageBody.Data
application/json

Data преобразован в строку на основе набора символов и затем к данным MATLAB с помощью функции jsondecode.

image/*

Data преобразован в изображение с помощью функции imread с заданным подтипом как формат, с помощью параметров по умолчанию. Если imread возвращает больше чем одно значение, то Data является массивом ячеек.

Для поддерживаемых типов данных изображения смотрите Поддерживаемые Подтипы Данных изображения. Если подтип не находится в этом списке, то подтип передается imwrite как формат, который может или не может поддерживаться.

audio/*

Data преобразован с помощью функции audioread для массива ячеек двух значений, матрицы m на n аудиоданных и уровня выборки в Гц. Подтип определяет формат, используемый audioread. Поддерживаемые типы:

  • audio/wav

  • audio/x-wav

  • audio/vnd.wav

  • audio/mp4

  • audio/flac

application/ogg не преобразован, потому что ogg данные не обязательно содержат аудио только.

text/csv
text/ "запятая разделил значения"
application/csv
application/ "запятая разделил значения"

Data преобразован в таблицу с помощью readtable, с принятым 'FileType' csv и набора символов, если задано, или кодировки по умолчанию MATLAB.

application/*spreadsheet*

Data преобразован в таблицу с помощью readtable с 'FileType', принятым, чтобы быть 'spreadsheet'.

text/xml
application/xml

Если Java доступен, Data преобразован в Java org.w3c.dom. Документ с помощью функции xmlread.

Если Java не доступен, Data обрабатывается как text/plain с набором символов UTF-8.

Если тип не является одним из перечисленных в таблице, то MATLAB определяет, является ли это одним из следующих символьно-ориентированных типов:

  • text/*

  • любой тип с набором символов

  • application/*javascript

  • application/vnd.wolfram.mathematica.package

MATLAB преобразовывает эти типы в строку, с помощью набора символов, если задано, или US-ASCII для text/plain, UTF-8 для типов приложения и кодирования MATLAB по умолчанию для других типов.

Если MATLAB не поддерживает тип, или если свойство HTTPOptions.ConvertResponse установлено в false, то:

  • Если тип символьно-ориентирован, то Data содержит полезную нагрузку, преобразованную в строку.

  • В противном случае Data содержит необработанный вектор uint8.

Если преобразование входящих данных предпринято, но сбои (например, данные "image/jpeg" не являются допустимыми данными о JPEG), то свойство History в HTTPException, выданном методом RequestMessage.send, содержит ResponseMessage с набором свойств Payload к полезной нагрузке uint8 и, если тип символьно-ориентирован, то Data установлен в полезную нагрузку, преобразованную в строку.

Поддерживаемые подтипы данных изображения

Следующие подтипы поддерживаются функцией imwrite как заданный формат. Например, аргументом формата для подтипа bmp является 'bmp'. Функция imread преобразовывает данные с заданным подтипом как формат.

Подтип

Формат, используемый
imwrite и imread

bmp

'bmp'

gif

'gif'

jpeg

'jpeg'

jp2

'jp2'

jpx

'jpx'

png

'png'

tiff

'tiff'

x-hdf

'hdf'

x-portable-bitmap

'pbm'

x-pcx

'pcx'

x-portable-graymap

'pgm'

x-portable-anymap

'pnm'

x-portable-pixmap

'ppm'

x-cmu-raster

'ras'

x-xwd

'xwd'

Смотрите также

| | | | | | | | | | | | |