2013-11-21 11 views
7

Visto questo q & una, ma non ha avuto gli stessi risultati come OP How to post files in swagger?swagger-node-express: come caricare il file da swagger-ui?

Utilizzando questa spec nella mia spavalderia-node-express API

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 + '"}'); 

    } 
}; 

quando posto tramite curl, curl -v -F [email protected] http://127.0.0.1:3000/uploads/file tutto funziona come previsto. Quando pubblico tramite swagger-ui (v 2.0.2) fallisce. Ho usato un proxy in entrambe le situazioni e swagger-ui non sta specificando il tipo di contenuto né sta passando i dati.

abbreviato postale grezzo tramite ricciolo (utilizzando il comando sopra)

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-- 

abbreviato postale grezzo tramite spavalderia-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 

Come devo configurare il mio percorso/spec così la spavalderia-ui pubblicheremo correttamente?

+0

Hai mai risolvere questo problema? Correndo nella stessa cosa. – clay

+0

Prova a impostare "paramType" 'a" form "piuttosto che" body ". – Ron

risposta

0

Ho avuto questo stesso problema, in cui potevo fare un POST con valori di modulo normali, ma quando ho passato un file, non ho ricevuto dati. Il problema per me era dovuto all'utilizzo di Express 4 e al fatto che non avevo installato e installato multer. I dettagli possono essere trovati qui:

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