2016-06-16 12 views
0

Ich baue eine Datei-Upload-Funktionalität mit meiner angularjs-App, die eine Datei auf meinem Node API hochladen würde, die ftp auf einen cdn-Server. Im Moment bleibe ich dabei, nur die Datei zu bekommen. Ich habe versucht, Multer zu verwenden, aber ich bin mir nicht sicher, wie man das Speichern an ein ftp umleiten kann.

Wie auch immer, dies ist mein Code withoout multer

<input type="file" multiple file-model="fileRepo"/> 


myApp.directive('fileModel', ['$parse', function ($parse) { 
     return { 
      restrict: 'A', 
      link: function(scope, element, attrs) { 
       element.bind('change', function(){ 
       $parse(attrs.fileModel).assign(scope,element[0].files) 
       scope.$apply(); 
       }); 
      } 
     }; 
    }]); 

/// /// Controller

$scope.saveFile = function(){ 
     var fd=new FormData(); 
     angular.forEach($scope.fileRepo,function(file){ 
      fd.append('file',file); 
     }); 

     $scope.newFile.files = fd; 

     FileService.uploadFile($scope.newFile) 
..... 

/// /// File

uploadFile: function(file){ 
      var deferred = $q.defer(); 

var uploadUrl = '/api/file/ftp/new'; 
       var requestFileUpload = { 
         method: 'POST', 
         url: uploadUrl, 
         data: file.files 
        } 
       var requestFileUploadConfig = { 
        transformRequest: angular.identity, 
        headers: { 'Content-Type': undefined } 
       } 
       $http.post(uploadUrl, file.files, requestFileUploadConfig) 
        .then(function(){ 
        }) 

/// Knotenteil ///

router.post('/ftp/new', function(req, res) { 
     console.log('file is ' + JSON.stringify(req.body)); 
    }); 
+0

Parser, welche HTML Sie verwenden? Busboy? –

Antwort

1

Sie müssen einen HTML-Parser verwenden, Sie können die Datei nicht einfach durch Lesen der Anfrage abfangen.

würde ich empfehlen die Verwendung busboy und connect-busboy dann werden Sie in der Lage sein, Ihre Datei zu lesen, das ein kleines Beispiel:

req.pipe(req.busboy); 
req.busboy.on('file',function(fieldname, file, filename, encoding, contentType){ 
    // get data 
    file.on('data',function(data){ 

    }).on('end', function(){ 

    }); 
}); 


req.busboy.on('field',function(fieldname, val){ 
    req.body[fieldname] = val; 
}); 

req.busboy.on('finish', function() { 
    // save file here 
}); 
+0

ich sehe. Ich dachte, ich kann die Datei nur ohne einen Parser lesen. Würden Sie Multer empfehlen? Wenn nicht, hat Busboy einen Weg, um die Datei direkt auf einen Server zu übertragen? – gdubs

+0

Ich benutze Multer nicht, aber schau es dir an, meine Empfehlung basiert auf meiner Erfahrung, aber du kannst diejenige benutzen, die dir am besten gefällt. Ich bin mir nicht sicher, ob ich direkt auf ein FTP hochladen kann Eine Analyse wird den Fehler beheben, um das Problem in Ihrer Frage zu beheben. –

+0

Sie haben Recht. Übrigens, speichert Busboy die Datei einfach automatisch in einen Zielordner? Wenn das der Fall ist, wie greife ich es, damit ich es ftp? wenn Sie wissen. – gdubs