问题:为什么这个node.js上传文件代码的时候使用了jade而不是使用swagger?使用swagger(v3; yaml)multiparty form-data和node.js(后端)进行文件上传
我一直在试图弄清楚如何使用swagger(yaml),multiparty,form-data和nodejs来上传文件。
我发现如何从这个网站上传文件的NodeJS代码示例: https://github.com/pillarjs/multiparty/blob/master/examples/azureblobstorage.js
此外,的NodeJS项目(类似于上面的github上链接的NodeJS codefound)也可以在这里找到(与样品一起项目):
description-of-demo
outdated-but-nice-demo-app
的代码的NodeJS按预期工作时前端是玉。然而form.parser(req)在使用swagger API时似乎失败了。原因似乎是因为数据位于req中的不同位置。成功时,数据似乎位于req._readableState.pipes中。在使用swagger时,数据似乎位于req.swagger.params中。
我不知道我是否应该将数据移动到req._readableState.pipes中,或者是否有不同的解析器应该用于swagger params(或其他可能会混淆的东西)。
// swagger.yaml
/azureFileTransfer:
x-swagger-router-controller: azureFilesController
post:
operationId: uploadAzureFile
description: upload azure file
# ticket info to be stored : schema: $ref: "#/definitions/azureFileData"
consumes:
- multipart/form-data
parameters:
- name: azureFileDataParam
description: the file to be uploaded
in: formData
required: false
type: file
responses:
"200":
description: Success
schema:
$ref: "#/definitions/GeneralResponse"
default:
description: Error
schema:
$ref: "#/definitions/ErrorResponse"
// azureFilesController.js(代码的NodeJS)
module.exports = { uploadAzureFile };
//POST
function uploadAzureFile(req, res, next) {
var multiparty = require('multiparty');
var accessKey = '123456storagepassword';
var storageAccount = 'myblobstorageName';
var fs = require('fs');
var container = 'containerwithinblobstorage';
var blobService = azure.createBlobService(storageAccount, accessKey);
var form = new multiparty.Form();
form.on('part', function (part) {
if (part.filename) {
var size = part.byteCount - part.byteOffset;
var name = part.filename;
blobService.createBlockBlobFromStream(container, name, part, size, function (error) {
if (error) {
res.send(' Blob create: error ');
}
});
} else {
form.handlePart(part);
}
});
form.parse(req); //req.swagger.params.file.value // req
res.send('OK');
}