Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Сырые данные из %request в WEB API  [new]
nurlybekovnt
Member

Откуда:
Сообщений: 20
Приветствую всех!

Проблема: не могу получить значения из form-data, отправленного клиентом, в том числе и файл.

Код клиента:
var formData = new FormData();
formData.append("name", "myName");
formData.append("file", myFile);
var request = new XMLHttpRequest();
request.open("POST", "http://mysite.com/api/submitform");
request.send(formData);


На бэк такой route:
<Route Url="/api/submitform" Method="POST" Call="MyClass:ApiCreate"/>

Код на бэк:
ClassMethod ApiCreate() As %CSP.Request
{
s c = ..%New()
// Здесь как-то надо получить данные из form-data
d c.%Save()
q ..ApiGet(c.%Id())
}


Пробовал:
%request.Get("name")
%request.GetMimeData("name")
%request.MimeData("name", 1)
%request.Data("name", 1)

Но везде возвращает пустоту. Хотел попробовать через %request.Content, но стринга, и, думаю, возникнут сложности при чтении файла, и, кажется, это очень плохая идея. В самом %request методы Get, Data, GetMimeData существуют, он типа %CSP.Request, проверял.

Спасибо!
16 апр 19, 14:13    [21863757]     Ответить | Цитировать Сообщить модератору
 Re: Сырые данные из %request в WEB API  [new]
eduard93
Member

Откуда:
Сообщений: 170
nurlybekovnt, метод ApiCreate как и любой другой REST обработчик должен возвращать %Status.

Попробуйте для отладки поставить в начало метода этот код:
set %response.ContentType = "html"
do ##class(%CSP.Utils).DisplayAllObjects()
quit $$$OK

Тогда при отправке запроса в ответ будет HTML страница где будут видны все части запроса, а исходя из этой страницы уже просто понять как взять что-то из %request.
16 апр 19, 15:28    [21863927]     Ответить | Цитировать Сообщить модератору
 Re: Сырые данные из %request в WEB API  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3808
eduard93,

Не, вот в том числе и файл - это неправильно. Именно файл получается иначе.
Для файла как-то так:

 #dim %request as %CSP.Request
 #dim stream as %CSP.BinaryStream = %request.GetMimeData("file")
 s file=##class(Data.OrderFile).%New()
 s file.Filename=stream.FileName
 d file.Content.CopyFrom(stream)


А для обычных полей
%request.Get("name")


Если не получается, то либо что-то с отправкой данных, либо вы при получении ломаете или теряете объект запроса.
16 апр 19, 16:32    [21864004]     Ответить | Цитировать Сообщить модератору
 Re: Сырые данные из %request в WEB API  [new]
nurlybekovnt
Member

Откуда:
Сообщений: 20
Блок А.Н.,

Дело в том, что я уже пробовал %request.Get("name")
17 апр 19, 17:34    [21865431]     Ответить | Цитировать Сообщить модератору
 Re: Сырые данные из %request в WEB API  [new]
nurlybekovnt
Member

Откуда:
Сообщений: 20
eduard93,

Да, конечно, там %CSP.request стоит, потому что я хотел посмотреть класс %CSP.request через хоткей F12, забыл убрать
18 апр 19, 11:08    [21865857]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить