【发布时间】:2015-11-23 06:40:38
【问题描述】:
我一直在努力将个人资料图片上传与常规文本数据一起发送到后端以通过猫鼬创建新用户。我已经尝试了从 ng-file-upload/angular-file-upload 到构建自定义指令的所有方法,但无济于事,我仍然无法获取图像或数据以将其发送到服务器端。
我的照片上传html sn-p如下:
<div ng-show="!Login">
<label class="col-xs-12 col-sm-4">Profile Picture</label>
<div class="col-xs-12 col-sm-4">
<input type="file" file-input="files" multiple/>
<button ng-click="upload()">Upload</button>
</div>
</div>
我创建了一个自定义指令“文件输入”,如下所示:
app.directive('fileInput', ['$parse', function($parse){
return {
restrict: "A",
link: function(scope, elm, attrs){
elm.bind("change", function(){
$parse(attrs.fileInput)
.assign(scope, elm[0].files)
scope.$apply()
});
}
}
}])
我的控制器看起来像这样:
$scope.upload = function(){
var fd = new FormData();
fd.append('file', $scope.files[0])
console.log(fd);
userFactory.addPhoto(fd)
.success(function(data){
console.log("Data: ", data);
})
}
这是我将表单数据发布到后端的服务:
userFactory.addPhoto = function(fd){
return $http.post('/users/addPhoto', fd, {
transformRequest:angular.identity,
headers:{
'Content-Type': undefined
}
})
}
所以问题在于,当我将数据发送到后端并到达那里时,我得到一个空白的 req.body 对象,其中没有任何内容
router.post('/addPhoto', function(req, res, next){
console.log(req.body);
// var profilePicture = new Buffer(req.file.buffer, 'base64').toString('ascii')
// console.log(profilePicture);
});
这里发生了什么?我想在后端的缓冲区中获取图像,以便我可以对其进行 base64 编码并将其与 mongoose 一起存储在 mongodb 中。
如果有人有办法将图像和文本数据一起发送到 ng-click 函数中,将它们传送到控制器,这样我就可以将它们都放在一个对象中,然后将该对象发送到后端一起注册一个新用户我非常喜欢这个解决方案。
【问题讨论】:
-
这个
router.post不是办法,你怎么能从后端得到响应。你可以在$http.post().success()函数中得到后端的答案。 -
我在我的服务中使用 $http.post()。我将该承诺返回给控制器以处理成功()。
标签: javascript angularjs node.js express mongoose