node-restify-validation icon indicating copy to clipboard operation
node-restify-validation copied to clipboard

Support for file uploads?

Open jessefulton opened this issue 11 years ago • 3 comments

First off, this and restify-swagger are awesome - thanks!

I'm trying to add a file upload to a post request, but can't seem to figure it out. Is this supported?

server.post
    url: "/upload"
    swagger:
        summary: "Upload"
        notes: "upload a video"
        nickname: "upload"
    validation:
        videoFile:
            dataType: "file"
            isRequired: true
            scope: "body"
            description: "Video File"
        title:
            isString: true
            isRequired: true
            scope: "body"
            description: "Video Title"

jessefulton avatar Nov 20 '13 19:11 jessefulton

Actually i never really managed to get the swagger file-upload stuff working. But i have to admit - i didn't try much ;-)

Feel free to try and contribute if you are successful! I just updated the module with some changes which might bring you a bit closer (swagger-ui has been updated as well in the demo project).

You can start here ;-)

server.post({url: '/upload',
    swagger: {
        summary: 'x',
        notes: 'y',
        nickname: 'z'
    },
    validation: {
        uploadFile: {
            swaggerType: "file",
            isRequired: false,
            scope: "body",
            description: "Video File"
        }
    }}, function (req, res, next) {
    res.send(req.params);
});

z0mt3c avatar Nov 21 '13 13:11 z0mt3c

Yea, I'm stuck around here...

server.post
    url: "/upload"
    swagger:
        summary: "Upload a video and thumbnail"
        notes: ""
        nickname: ""
        consumes: [ # which of these do we need?
            "multipart/form-data"
            "application/json"
            "image/jpeg"
            "video/x-m4v"
            "application/x-www-form-urlencoded"
        ]
    validation:
        video:
            swaggerType: "file"
            parameterType: "form"
            scope: "body"
            isRequired: false
            description: "Video"
        thumbnail:
            swaggerType: "file"
            parameterType: "form"
            scope: "body"
            isRequired: false
            description: "Video Thumbnail"
        title:
            isString: true
            isRequired: true
            scope: "body"
            description: "Video Title"

If I select multipart/form for the fields in the swagger ui, then I get "bad content-type header, no multipart boundary." If I try to set each field to it's correct type, not all of them come through... Not sure if this is an issue with Swagger or restify-validation.

Thoughts?

jessefulton avatar Nov 22 '13 00:11 jessefulton

Hmm, i see the issue... you can simply unload restify-validation. restify-swagger doesnt depend on the usage of the validation module. But it doesnt change anything. From my point of view the requests which is generated by swagger/swagger-ui itself looks strange.

Hm, anything wrong in here?

{
    "notes": null,
    "nickname": "Upload",
    "produces": ["application/json"],
    "consumes": ["multipart/form-data", "application/json", "image/jpeg", "video/x-m4v", "application/x-www-form-urlencoded"],
    "responseMessages": [{
        "code": 500,
        "message": "Internal Server Error"
    }],
    "parameters": [{
        "type": "file",
        "dataType": "file",
        "name": "video",
        "description": "Video",
        "paramType": "body"
    }, {
        "type": "file",
        "dataType": "file",
        "name": "thumbnail",
        "description": "Video Thumbnail",
        "paramType": "body"
    }, {
        "name": "Body",
        "description": "Upload a video and thumbnail",
        "required": true,
        "dataType": "Upload",
        "paramType": "body"
    }],
    "summary": "Upload a video and thumbnail",
    "httpMethod": "POST",
    "method": "POST"
}

z0mt3c avatar Nov 22 '13 09:11 z0mt3c