将文件作为参数传递给后端

时间:2016-07-20 11:16:26

标签: angularjs node.js

我试图将文件从angular传递给节点。

我设法让前端运行起来。它允许用户选择一个她随后在控制器中访问的文件:

 scope.upload = function() {

  if (scope.file) {
    var uniqueFileName = 'Test/' + scope.file.name;
    var params = {
      Key: uniqueFileName,
      ContentType: scope.file.type,
      Body: scope.file
    };
    console.log(params);  // Params contains the file I wish to pass to node
  }

}

现在我该如何将此参数传递给节点?

让我们说我在服务器上创建了这样的路线:

app.post('/upload', function(req, res) {

 // Can I get req to hold the param maybe?

}); 

我是否有可能以某种方式将参数直接从ng-controller传递到此路径?

谢谢

编辑:

这是我到目前为止所得到的:

scope.upload = function() {

  if (scope.file) {
    var uniqueFileName = 'Test/' + scope.file.name;
    var params = {
      Key: uniqueFileName,
      ContentType: scope.file.type,
      Body: scope.file
    };
    console.log(params);  // Params contains the file I wish to pass to node
    $http
       .post('/uploads', {stickie: params})
       .success(function(data){
           //what to do here
       })
       .error(function(data){
           console.log('Error: ' + data);
       });
  }

我应该补充说,尝试传递给节点的文件是pdf。

现在我可以像这样访问params-object innode:

 app.post('/uploads', function(req, res) {

    var file = req.body.stickie;
    console.log(file);

但由于某些原因stickie.Body似乎没有被传递...... 以下是在服务器上记录的内容:

{ Key: 'Test/myfilename',
  ContentType: 'application/pdf',
  Body: {} 
}

感觉就像我很近但为什么身体不出现?

2 个答案:

答案 0 :(得分:0)

//node.js
app.post('/upload_file', function(req, res){
    var file = req.file;
    res.end();
});



$(document).ready(function(){
    $('#input').change(function(e) {
      var files = e.target.files;

      $.each(files, function(index, file) {
    	var name = file.name;
    	var ext = file_extension(name).toLowerCase();
    	var size = file.size;
    	var type = file.type;

    	 var fr = new FileReader(); 
    	 fr.readAsDataURL(file);
         fr.onload = function(){
    		var new_file = {};
    		new_file.name = name;
    		new_file.size = size;
    		new_file.type = type;
    		new_file.content =fr.result;	
           
            send_file(new_file);
    	  }
      });
    });
})
function send_file(file){
  var url_server = "your_url/upload_file";
  $.ajax({
		type : "POST",
		url : url_server,
		dataType : "json",
		async : true,
		data : ({
			file : file
		}),
		success : function (data) {

		},
		error : function (request, status, error) {
			console.log(request);
		}
	});  
  }

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

在节点服务器上使用multer进行文件上传

https://www.npmjs.com/package/multer