내 사용자 인터페이스 (angularjs)에서 새 행을 만듭니다. 각 행에는 파일 업로드 버튼이 있습니다. 모든 파일을 메타 데이터와 함께 업로드하고 각 행을 한 번의 호출로 저장하려고합니다. Nodejs API에 게시하는 복잡한 객체는 다음과 같습니다.Nodejs API - multer fileupload - 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"
}
]
}
이 JSON은 js API에 게시됩니다. Nodejs 쪽에서 multer를 사용하여 업로드 된 파일을 서버에 저장합니다. multer의 .any() 메소드를 사용하여 API에있는 모든 파일을 가져 오지만 Steps [x] .FileUrl 속성없이 게시 된 객체를 가져옵니다.
이 파일이 추가 된 필드 이름에 대한 정보가있는 파일 개체입니다. 아래는 디버거에서 볼 수있는 정보입니다.
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
지금 내가 게시 내 복잡한 개체 단계 [0] .FileUrl 속성을 가지고 있지 않기 때문에, 그것을 수행 할 작업을, 나는 (즉 req.files) 각 파일에 대해 반복하고 필드 이름을 사용하려면 이 속성을 만들고 originalName을 값으로 할당하십시오.
어떻게 할 노력하고 그것을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);
});
}
사람이 같은 런타임에 객체에 속성을 할당하는 방법을 알고 있나요?