2015-10-05 4 views
6

Sto usando Nodejs + Multer + angularjs per caricare i file sul server.

Ho un semplice file HTML:nodejs + multer + angularjs per il caricamento senza reindirizzamento

<form action="/multer" method="post" enctype="multipart/form-data"> 
<input type="file" id="photo" name="photo"/> 
<button id="Button1">Upload</button> 
</form> 

Nodejs parte:

var multer = require('multer'); 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, './uploads/') 
    }, 
    filename: function (req, file, cb) { 
     cb(null, file.originalname) 
    } 
}) 

app.post('/multer', upload.single('photo'), function (req, res) { 
    res.end("File uploaded."); 
}); 

questo funziona perfettamente e il file viene caricato con successo.

ma questo reindirizza a "/ multer" dopo aver caricato il file (a causa dell'elemento modulo).
Come rimanere sulla stessa pagina ?? ..possibly utilizzando angularjs
Così ho provato questo:

fare un file HTML angolare:

<section data-ng-controller="myCtrl"> 
<input type="file" id="photo" name="photo"/> 
<button id="Button1" ng-click="f()">Upload</button> 
</section> 

e un controller Angularjs:

angular.module('users').controller('myCtrl',[$scope,function($scope){ 
    $scope.f=function(){ 
     var photo = document.getElementById('photo'); 
     var file = photo.files[0]; 
     if (file) { 

      //code to make a post request with a file object for uploading????? 

      //something like.. 
      //$http.post('/multer', file).success(function(response) { 
      //console.log("success"); 
      //}); 
     } 
    } 
}]); 


qualcuno può aiutarmi con IL CODICE PER EFFETTUARE UNA DOMANDA POSTALE CON UN OGGETTO FILE PER CARICARE UTILIZZANDO MULTER DA ANGULARJS CONTROLLER?

grazie

+0

Hai trovato qualche soluzione? –

+1

@SimranKaur sì ho trovato una soluzione :) –

+1

@SimranKaur Ho postato la risposta –

risposta

21

Angularjs direttiva:

angular.module('users').directive('fileModel', ['$parse', function ($parse) { 
return { 
    restrict: 'A', 
    link: function(scope, element, attrs) { 
     var model = $parse(attrs.fileModel); 
     var modelSetter = model.assign; 

     element.bind('change', function(){ 
      scope.$apply(function(){ 
       modelSetter(scope, element[0].files[0]); 
      }); 
     }); 
    } 
}; 
}]); 

angolare file html:

<input type="file" file-model="myFile"/><br><br> 
<button ng-click="uploadFile()">Upload</button> 

Angularjs Controller:

route file server di

Nodejs:

var multer = require('multer'); 
var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, './uploads/') 
    }, 
    filename: function (req, file, cb) { 
     cb(null, file.originalname+ '-' + Date.now()+'.jpg') 
    } 
}); 
var upload = multer({ storage: storage }); 

app.post('/multer', upload.single('file')); 

Enjoy!

+0

per questo, "fd.append ('file', file)" e, questo "upload.single ('file')" - grande grazie ! – dimpiax

+0

grazie mille .... – Shreyas

+0

Mi dà {Errore: Non trovato: POST/multer nel terminale e POST XHR https: //..../multer [HTTP/1.1 404 non trovato 220 ms] nel debugger di Explorer come può Ho risolto questo? – nolags