Пример запроса POST на загрузку файла REST?

Я пытаюсь создать сервер RESTful на Erlang с помощью Cowboy, и у меня возникают проблемы из-за того, что я ничего не знаю о HTTP-запросах. Я не могу найти пример запроса на загрузку файла RESTful, только обычный.

Это работает для обычного HTTP-сервера (найденного в примерах Cowboy) для загрузки файла compile.sh, который содержит git add * ; git commit -a -m "upload" ; git push:

POST /upload HTTP/1.1
Host: 169.229.85.167:8080
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryd1YD0OADcYFcuL0v
Origin: http://169.229.85.167:8080
Accept-Encoding: gzip, deflate
Authorization: Basic cmltcm9jazpwYXNzd29yZA==
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10
Referer: http://169.229.85.167:8080/
Content-Length: 243
Accept-Language: en-us

------WebKitFormBoundaryd1YD0OADcYFcuL0v
Content-Disposition: form-data; name="inputfile"; filename="upload.sh"
Content-Type: application/x-sh

git add * ; git commit -a -m "upload" ; git push

------WebKitFormBoundaryd1YD0OADcYFcuL0v--

Но если я отправлю этот запрос на сервер RESTful, я получу такой ответ:

HTTP/1.1 415 Unsupported Media Type
connection: keep-alive
server: Cowboy
date: Fri, 24 Oct 2014 04:34:06 GMT
content-length: 0
content-type: text/html
vary: accept

Теперь, возможно, я неправильно сделал сервер RESTful, но я не уверен. Многое из этого инкапсулировано в Cowboy, так что я действительно не знаю, как это работает. Должен ли запрос отличаться для сервера RESTful?


person sudo    schedule 24.10.2014    source источник


Ответы (1)


На самом деле нет разницы между запросом на загрузку файла RESTful и «обычным», если вы используете HTTP POST, в любом случае это HTTP-запрос.

Поскольку вы получаете ответ 415 Unsupported Media Type, это, скорее всего, означает, что ваш сервер (RESTful) не поддерживает Accept тип контента multipart/form-data, который вы отправляете. Вы захотите посмотреть, что ваш сервер RESTful может принять, вы можете отправить запрос OPTIONS на тот же URL-адрес, чтобы обнаружить это, или проверить код на стороне сервера.

person Ross Taylor-Turner    schedule 31.10.2014
comment
Спасибо, значит проблема на сервере. Он якобы принимает multipart/form-data, но что-то идет не так. - person sudo; 01.11.2014