我的 Meanjs 应用程序应该将徽标上传到我的 UserSchema 中的嵌套模式中。我能够成功上传文件,因为我能够成功为用户存储个人资料照片。但是当我尝试将图像保存到嵌套架构中时,它失败了。

我的模型看起来像这样:

ClubSchema = {name:String,
              logo:Buffer};

UserSchema = {name:String,
              photo:Buffer,
              club:[ClubSchema]
             }

我能够成功地将所有数据插入到我的 ClubSchema 中,但不能插入徽标。

我的 client.controller.js
    var user = new Users($scope.user);
    console.dir(user.club);      //I can see the logo here
    for(var i = 0;i<user.club.length;i++){
        user.club[i].logo = $scope.uploadedLogos[i];  //Still trying to force it into the object

        user.club[i].hasLogo = true;    //Mysterious hasLogo = false appears
    }
    user.$update(function(response) {
        $scope.success = true;
        console.log('Inside scope success User is ');
        console.dir(user);               //hasLogo=false appears in this and no logo
        $location.path('/');
        }, function(response) {
             $scope.error = response.data.message;
        });

我的 server.controller.js
if (user) {
    // Merge existing user
    user = _.extend(user, req.body);
    user.updated = Date.now();
    user.displayName = user.name;

    user.save(function(err) {
        if (err) {
            return res.status(400).send({
                message: errorHandler.getErrorMessage(err)
            });
        } else {
            req.login(user, function(err) {
                if (err) {
                    res.status(400).send(err);
                } else {
                    res.json(user);
                }
            });
        }
    });
} else {
    res.status(400).send({
        message: 'User is not signed in'
    });
}

hasLogo 字段完全令人困惑,因为我的代码中不存在这样的赋值。我添加了 hasLogo = true,希望它能以某种方式将 hasLogo 设置为 true 并上传图像,但这也不起作用。我不知道这个 hasLogo 是从哪里来的。在 hasLogo = true 循环之后,如果我打印对象,我可以看到两个 hasLogo 字段,一个为真,另一个为假。 $update 成功后,总是false。我的模型不包含 hasLogo 字段。

最佳答案

这是我使用 MEAN.JS 进行文件上传的方式。

模型

  var UserSchema = new mongoose.Schema({
  name:{type:String,required:true},
  photo:Buffer  // Image
  });

服务器 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"});
    });
};

客户端 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">

ng-file-select 用于从客户端获取文件。

这对我来说很好用。希望这可以帮助。

关于mongoose - Meanjs 无法将图像保存到嵌套模式中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29604499/

10-11 14:27