質問:このnode.jsアップロードファイルコードはjadeで動作しますが、swaggerを使用すると動作しません。ファイルアップロードのためにswagger(v3; yaml)multipartyフォームデータとnode.js(バックエンド)を使用
私はswagger(yaml)、multiparty、form-data、nodejsを使ってファイルをアップロードする方法を解明しようとしています。
私はこのウェブサイトからファイルをアップロードする方法についてnodejsコード例を見つけました: https://github.com/pillarjs/multiparty/blob/master/examples/azureblobstorage.js
また、サンプルと一緒に(プロジェクト(nodejsに似ては、上記のgithubのリンクにcodefound)もここで見つけることができnodejsプロジェクト):フロントエンドはヒスイであるとき、予想通り
description-of-demo
outdated-but-nice-demo-app
nodejsコードが動作します。しかし、swagger APIを使用するとform.parser(req)が失敗するようです。その理由は、データがreq内の別の場所に配置されているためです。成功すると、データはreq._readableState.pipesに格納されているようです。 swaggerを使用すると、データはreq.swagger.paramsに格納されているようです。
私はデータをreq._readableState.pipesに移動することになっているのかどうかわかりません。また、スガーガーのパラメータに使用する必要がある別のパーサーがあるかどうかは分かりません。 (コードnodejs)
// 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溶液実測
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');
}