問題:爲什麼這個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');
}