Meanjs unable to save image into nested schema
This is the way i used MEAN.JS for file upload.
Model
var UserSchema = new mongoose.Schema({ name:{type:String,required:true}, photo:Buffer // Image });
Server Controller
var userPicture = function(req,res){ // Stores Picture for a user matching the ID. user.findById(req.param('id'), function (err, user) { console.log(req.files) // File from Client if(req.files.file){ // If the Image exists var fs = require('node-fs'); fs.readFile(req.files.file.path, function (dataErr, data) { if(data) { user.photo =''; user.photo = data; // Assigns the image to the path. user.save(function (saveerr, saveuser) { if (saveerr) { throw saveerr; } res.json(HttpStatus.OK, saveuser); }); } }); return } res.json(HttpStatus.BAD_REQUEST,{error:"Error in file upload"}); });};
Client Controller
$scope.saveuserImage = function(){ $scope.upload = $upload.upload({ // Using $upload url: '/user/'+$stateParams.id+'/userImage', // Direct Server Call. method:'put', data:'', // Where the image is going to be set. file: $scope.file }).progress(function (evt) {}) .success(function () { var logo = new FileReader(); // FileReader. $scope.onAttachmentSelect = function(file){ logo.onload = function (e) { $scope.image = e.target.result; // Assigns the image on the $scope variable. $scope.logoName = file[0].name; // Assigns the file name. $scope.$apply(); }; logo.readAsDataURL(file[0]); $scope.file = file[0]; $scope.getFileData = file[0].name }; location.reload(); $scope.file = ""; $scope.hideUpload = 'true' }); $scope.getFileData = ''; // location.reload() };
Html
<input ng-file-select="onAttachmentSelect($files)" ng-model="getFileData" name="upload" type="file" required="true">
The ng-file-select is used to get the file from the client.
This works fine for me. Hope this helps.