angular-file-upload使用笔记

引入

github Bower:

bower install ng-file-upload-shim --save(for non html5 suppport) 
bower install ng-file-upload --save 

构建表单

<form name='test'> 
<div class="btn btn-default " ngf-select ng-model="upload_img" 
    name="upload_img" ngf-pattern="'image/*'" ngf-accept="'image/*'" 
    ngf-max-size="2MB" ngf-min-height="100">Select 
</div> 
<button ng-click='submitForm(upload_img)'> 
</button> 
</form> 

在文档中看见,可以用input,button,div等方式来构建,但是我推荐用Button,因为可以自己设置样式.

使用

其中div标签必须的是 ngf-select与ng-model和name这三个属性.其他的都是可选性,如果你上传的是图片,你可以用ngf-thumbnail来预览.并且可以在ngf-thumbnail中嵌入其他数据比如

<img ngf-thumbnail="upload_img||user_info.avatarUrl" class="" alt="" width="100" height="100"/> 

如何在controller获取到

推荐在提交的时候传递参数,这里我已经躺了一个坑了,官方加了一个$号,我这里用$upload_img没用

<button ng-click='submitForm(upload_img)'> 
</button> 

$scope.submitForm=function(upload_img){ 
   console.log(upload_img) 
} 

上传文件

这里只演示单文件上传,其实上传也挺简单的.采用POST上传Upload需要在controller注入.

$scope.submitForm=function(_upload_img){ 
   Upload.upload( 
       { 
           url: '/api/user/'+$stateParams.id, 
           data: {file: _upload_img, 'user_info': $scope.user_info}, 
           method:'POST' 
       }).then(function (data) { 
           data=data.data 
           if(data.err){ 
               $scope.user_err=data.err 
               $timeout(function(){ 
                   $window.location.reload() 
               },1500) 
           }else{ 
               $scope.user_err=data.info 
               $timeout(function(){ 
                   $window.location.reload() 
               },1500) 
           } 
   }); 
} 

这里的url为post地址,后面的then可以接受几个function,第一个是成功,第二个是失败,第三个是事件触发,具体可以参考官网

nodejs获取

这里顺便把这个坑给说了.

引入 multer

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

具体的大家可以去看一下multer官网文档,这里简单说说.storage是定义存储的一些相关信息,destination为存储地址,filename为存储名字那么upload.single就比较重要了,这点就是定义需要解析的body段.在upload上传的时候我们在其中附加了一个字段 也就是file:_upload_img,也就是file这个字段就需要被multer来解析,解析后我们就可以拿到file了

获取file

app.post("/api/xxxxxx",function(req,res){ 
   console.log(req.file) 
}) 

即可以拿到里面的文件了.目前就这么多吧.有坑再填