Angularjs 使用multer、ng file Upload、angular和node上传多个文件,并将动态表单数据绑定到每个文件
我在客户端使用angular和ng文件上传。我在服务器端使用node、express和multer 当用户选择多个文件时,我会显示文件的预览以及绑定到模型的文本区域。文本区的目的是让用户能够为每个上传的文件提供注释/说明 当我调用ng file upload的upload函数并传入文件的模型时,我看到特定于每个文件的动态表单数据出现在正在上载的数组中 在服务器端,我使用multer。一切似乎都运转正常。我可以上传多个文件,但是动态表单数据在multer的内置req.files对象上不可用,我不知道在哪里可以访问动态数据 我已搜索了请求对象,但找不到我正在查找的数据 如何将动态数据单独添加到每个文件中,并将其传递给服务器并对其进行访问 客户Angularjs 使用multer、ng file Upload、angular和node上传多个文件,并将动态表单数据绑定到每个文件,angularjs,node.js,upload,multer,ng-file-upload,Angularjs,Node.js,Upload,Multer,Ng File Upload,我在客户端使用angular和ng文件上传。我在服务器端使用node、express和multer 当用户选择多个文件时,我会显示文件的预览以及绑定到模型的文本区域。文本区的目的是让用户能够为每个上传的文件提供注释/说明 当我调用ng file upload的upload函数并传入文件的模型时,我看到特定于每个文件的动态表单数据出现在正在上载的数组中 在服务器端,我使用multer。一切似乎都运转正常。我可以上传多个文件,但是动态表单数据在multer的内置req.files对象上不可用,我不知
$scope.uploadFiles = function(files) {
console.log('files', files); //I see that this argument contains the user input as property ‘Desc’
if (files && files.length) {
Upload.upload({
url: 'api/filesinorg/upload/'+ $rootScope.currentUser.primary_org_id,
arrayKey: '', // default is '[i]'
data: {
files: files,
fileData: {
Organization_id: $rootScope.currentUser.primary_org_id,
uploadBy_id: $rootScope.currentUser._id
}
}
})
.then(function (result) {
$timeout(function () {
$scope.filesSelected = [];
$scope.uploadedFiles.push(result.data.files);
});
}, function (result) {
if (result.status > 0) {
$scope.errorMsg = result.status + ': ' + result.data;
}
}, function (evt) {
$scope.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
});
}
};
服务器
var multer = require('multer');
var uploadPath = '';
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/'+ req.params.orgId + '/')
},
filename: function (req, file, cb) {
cb(null, file.originalname);
}
});
var upload = multer({ storage: storage });
var uploadRoot = 'uploads/';
function checkUploadPath(req, res, next) {
var orgId = req.params.orgId;
uploadPath =uploadRoot + orgId + '/';
fs.stat(uploadPath, function(err, stats) {
if(err) {
console.log('Error', err);
fs.mkdir(uploadPath, function(err) {
if(err) {
console.log('Error in folder creation');
next();
}
next();
});
}
else {
next();
}
});
}
var type = upload.array('files');
router.use('/filesinorg/upload/:orgId', checkUploadPath, type);
router.route('/filesinorg/upload/:orgId')
.post(function(req, res) {
var orgId = req.params.orgId;
var filesUploaded = req.files;
var fileData = req.body.fileData;
var isError = false;
var filesSaved = [];
filesUploaded.forEach(function(file) {
console.log('file', file);
console.log('file.Desc', file.Desc);
var newFile = new File();
newFile.fileName = file.originalname;
newFile.serverPath = file.path;
newFile.shortDesc = file.Desc.slice(0,20);
newFile.Desc = file.Desc;
newFile.upload_dt = Date.now();
newFile.uploadBy_id = fileData.uploadBy_id;
newFile.Organization_id = fileData.Organization_id;
newFile.type = file.mimetype;
file.save(function(err, savedFile) {
if (err) {
return isError = true;
}
filesSaved.push(newFile);
console.log('File Saved success fully');
});
});
if(isError) {
res.status(500).send({
success: false,
msg: 'Error Saving File',
file: null
})
} else {
res.status(200).send({
success: true,
msg: 'Saved Contact',
files: filesSaved
});
}
});
我被困在同一个场景中,需要发送多个文件及其名称和大小。
您可以使用closure函数,它可以充当中间人,可以访问全局变量、局部变量以及即时局部变量。我的解决方案是使用我想要的所有数据构建完全独立的对象,然后根据相同的请求保存数据。multer或ng file upload正在将我在客户端创建的对象数组转换为单个对象,每个字段值都有数组。因此,我还必须在客户机上对对象进行字符串化,并在服务器上对其进行解析。我不确定这是实现我想要的最好方式。我不确定这是如何回答这个问题的,或者与这个问题有关。