swagger-node-express: как загрузить файл из swagger-ui?

Видел этот вопрос и ответ, но не получил таких же результатов, как OP Как публиковать файлы в swagger?

Использование этой спецификации в моем API swagger-node-express

exports.saveFile = {
  'spec' : {
    "description" : "Saves a file to filesystem",
    "path" : "/uploads/file",
    "notes" : "",
    "summary" : "POST a file to storage",
    "method" : "POST",
/*    "supportedContentTypes" : [ 'multipart/form-data' ],   */
    "produces":[ "application/json" ],
    "consumes":[ "multipart/form-data" ],
    "params" : [{
      "name": "File",
      "description": "The file to upload.",
      "paramType": "body",
      "required": true,
      "allowMultiple": false,
      "dataType": "file"
    }
    ],
    "responseClass" : "ArbitraryJson",
    "errorResponses" : [ errors.invalid('file') ],
    "nickname" : "saveFile"
  },
  'action' : function(req, res) {

    res.send('{"msg":"success", "file path": "' + req.files.file.path + '"}');

  }
};

Когда я отправляю POST через curl, curl -v -F [email protected] http://127.0.0.1:3000/uploads/file все работает как положено. Когда я публикую через swagger-ui (v 2.0.2), это не удается. Я использовал прокси в обеих ситуациях, и swagger-ui не указывает тип контента и не передает данные.

Сокращенный необработанный пост через curl (используя команду выше)

POST http://127.0.0.1:3000/uploads/file HTTP/1.1
User-Agent: curl/7.27.0
Host: 127.0.0.1:3000
Accept: */*
Content-Length: 43947
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------9af70f8a272c

------------------------------9af70f8a272c
Content-Disposition: form-data; name="file"; filename="scrot.png"
Content-Type: application/octet-stream
...
------------------------------9af70f8a272c--

Сокращенный необработанный пост через swagger-ui

POST http://127.0.0.1:3000/uploads/file HTTP/1.1
Host: 127.0.0.1:3000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Referer: http://127.0.0.1:3000/docs/
Content-Length: 0
Content-Type: text/plain; charset=UTF-8
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Как мне настроить свой маршрут / спецификацию, чтобы swagger-ui публиковал правильно?


person rogodeter    schedule 21.11.2013    source источник
comment
Вы когда-нибудь решали это? Сталкиваюсь с тем же.   -  person clay    schedule 11.03.2014
comment
Попробуйте установить "paramType" для формы, а не для тела.   -  person Ron    schedule 31.12.2014


Ответы (1)


У меня была такая же проблема, когда я мог выполнить POST с обычными значениями формы, но когда я передал файл, я не получил данных. Проблема для меня была связана с использованием Express 4, а также с отсутствием установленного и настроенного multer. Подробности можно найти здесь:

https://github.com/swagger-api/swagger-node-express/issues/202

person Levi Rosol    schedule 30.03.2015