2016-07-10 13 views
0

登録フォームにファイル入力を使用しています。送信ボタンをクリックすると、ユーザーがデータベースに追加され、ファイルアップロードが開始されます。onchange関数を使用してイメージをs3にアップロードする際にエラーが発生しました。角度js

私のhtmlフォームで、私はのonchange機能を使用していますが、ファイルが変更されるたびに、コンソールは機能が

コントローラに定義されていないというエラーが発生します:ユーザーのサインアップ

ため

var vm = this; 

$scope.setFile = function(element) { 
$scope.$apply(function() { 
    $scope.theFile = element.files[0]; 
    console.log($scope.theFile) 
}); 
} 

$scope.signup = function() { 
    $http 
     .post('/api/usersignup', vm.userData) 
     .then(function (data) { 

    if (data) { 
    uploadImage(data.userId, $scope.theFile) 
    } 
    else { 
    console.log("null"); 
    } 
}) 

}; 

function uploadImage(userId, fileData) { 
console.log('user----------->'+userId+"------------------>"+fileData) 
$http 
.post('/api/testupload', userId, fileData) 
.then(function (data) { 


}) 
} 

APIを画像について

api.post('/usersignup', function(req, res) { 

var name = req.body.name, 
email = req.body.email, 
password = req.body.password; 

var newUser = new User({ 
name: name, 
email: email, 
password: password, 
tag: 'user' 
}); 

nev.createTempUser(newUser, function(err, newTempUser) { 
    if (err) { 
     return res.status(404).send(err); 
} 

     // new user created 
     if (newTempUser) { 
     var URL = newTempUser[nev.options.URLFieldName]; 


     nev.sendVerificationEmail(email, URL, function(err, info) { 
      if (err) { 
      console.log(err); 
      return res.status(404).send(err); 

      } 
      res.json({ 
      msg: 'An email has been sent to you. Please check it to verify your account.', 
      info: info 
      }); 
     }); 

     // user already exists in temporary collection! 
    } else { 
     res.json({ 

     msg: 'You have already signed up. Please check your email to verify your account.' 
     }); 
    } 
    }); 
}); 

APIはS3にアップロード

api.post('/testupload', function(req , res) { 
userId = req.body.userId; 
async.waterfall([ 
    function(done) { 
    crypto.randomBytes(50, function(err, buf) { 
     var photoid = buf.toString('hex') + '.png'; 
     done(err, photoid); 
    }); 
    }, 

    function(photoid, done) { 
    var file = req.body.fileData; 
    var stream = fs.createReadStream(file.path); 


    return s3fsImpl.writeFile(photoid, stream).then(function(err){ 
     fs.unlink(file.path, function(err){ 
     if(err) 
      console.log(err); 
     }) 
     var imgid = photoid; 
     res.json(photoid); 
    }) 
    } 

    ]) 
}); 

htmlコードはここにある:

<div class="container" ng-controller="UserCreateController as user"> 
<form class="form-sigin" method="post" ng-submit="signup()" enctype="multipart/form-data" > 
    Name: <input type="text" name="name" class="form-control" ng-model="user.userData.name"> 
    email: <input type="text" name="email" class="form-control" ng-model="user.userData.email"> 
    Password: <input type="password" name="password" class="form-control" ng-model="user.userData.password"> 
    <input type="file" name="file" onChange="setFile(this)">      
    <button type="submit" class="btn btn-danger" >Signup</button> 
    </form> 
</div> 

答えて

1

ngChangeディレクティブは入力タイプのファイルを(あなたがhereを確認することができますよう)をサポートしていませんので、はい、あなたはonchangeあなたを呼び出すために、しかし、のonchange使用する必要があります変更する必要がありますこの

<input type="file" name="file" onChange="setFile(this)"> 

用:

<input type="file" name="file" onchange="angular.element(this).scope().setFile(this)"> 
+0

私はこれを行いました....しかし、このファイルをapi呼び出しに送る方法は? 'testupload' ??? –

+0

さて、すでにファイルの価値はありますか? '$ scope.theFile = element.files [0];' – developer033

+0

大丈夫ですので、$ scope.theFIleをtestuploadに送ります.....しかし、どのようにそれにアクセスするのですか? req.body.theFileは定義されていません –

関連する問題