Dans mon interface utilisateur (angularjs), je crée une nouvelle ligne. Chaque rangée a un bouton de téléchargement de fichier. Je veux télécharger tous les fichiers avec les métadonnées et enregistrer chaque ligne en un seul appel. L'objet complexe que je posterai à l'API NodeJS est un peu comme ci-dessousAPI Nodejs - multer fileupload - Ajout dynamique de la propriété et de sa valeur à l'objet JSON
var activity = {
"Id" : 1,
"Name" : "Test",
"Steps" : [
{
"StepId":1,
"FileUrl": {fileObject} // this property if bound with the file upload directive 'ng-file-upload' by Daniel Farid
"Description" : "Save this file"
},
{
"StepId":2,
"FileUrl": {fileObject} // this property if bound with the file upload directive 'ng-file-upload' by Daniel Farid
"Description" : "Save this file2"
}
]
}
Ce JSON sera affiché à l'API de nœud. Du côté Nodejs, j'utilise multer pour enregistrer les fichiers téléchargés sur le serveur. Je reçois tous les fichiers dans l'API en utilisant la méthode .any() de multer, mais j'obtiens l'objet posté sans la propriété Steps [x] .FileUrl.
L'objet fichier qui contient les informations sur le nom du champ dans lequel ce fichier a été ajouté. Ci-dessous l'information que je vois dans le débogueur.
Array[2]
length:2
[0]:Object
destination:"C:\DeleteThis\"
encoding:"7bit"
fieldname:"Steps[0][FileUrl]"
filename:"ed13d2a61cb38c43f1f46a221855a896"
mimetype:"image/png"
originalname:"deploy.png"
path:"C:\DeleteThis\ed13d2a61cb38c43f1f46a221855a896"
size:2347
[1]:Object
Maintenant ce que je veux faire, puisque mon objet complexe qui est affiché n'a pas d'étapes [0] propriété .FileUrl, je veux itérer pour chaque fichier (c.-à-req.files) et utiliser nomchamp à Créez cette propriété et attribuez-lui la valeur originale.
Comment je suis en train de le faire
var deployment = req.body;
if(req.files){
var app = _config.getApplicationConfig(req.body.ApplicationId);
req.files.forEach(function(f){
//Move file to the deployment folder.
_utils.createDirIfNotExist(app.packageDir);
var newPath = _utils.DetermineFileName(f.originalname, app.packageDir);
_fs.renameSync(f.path, path.join(app.packageDir,newPath));
var newFileName = path.basename(newPath);
//set the file url to corresponding field
var evalExp = "deployment." + f.fieldname; //I get evalExpression as "deployment.Steps[0][FileUrl]"
eval(evalExp); //Here it fails saying FileUrl is not defined
evalExp = "deployment." + f.fieldname + "= \"" + newFileName.toString() + "\"";
eval(evalExp);
});
}
Est-ce que quelqu'un sait comment peut en attribuer la propriété à un objet au moment de l'exécution?