nodejs 上传文件 upload

只是现在主要用nodejs做后端了,所以记录一些上传文件的使用方法。

 

上传文件的主要方式:

1、form上传,优点是方便,缺点是没法回调,上传后返回的数据没法处理

2、ajax上传,优点是可控制,有回调,缺点是不太方便

 

用form上传,express后端接收,有很多插件,如formidable。但是没有回调。

用ajaxFileUpload上传,express后端接收。看着像是ajax上传,其实中间会生成form multipart/form-data,所以可以使用multer接收,还有回调,确实挺不错的。

 

 

1、form上传

示例已经归档

 

2、ajax上传:使用ajaxfileupload上传,nodejs后端接受。

html

<form>
    <input type='file' value='文件导入' id='csv_import' name='csv_import'/>
    <input type='button' value='上传' id='csv_upload' name='csv_upload'/>
</form>
// form不需要添加其他属性
// input name和id保持一致

 js

$.ajaxFileUpload({
        url: '/csvUpload', 
        type: 'post',
        secureuri: false, 
        fileElementId: 'csv_import', 
        data: {  
            "userId": 123                    
        },
        dataType: 'json',
        success: function(data, status){
           debugger       

        },
        error: function(data, status, e){ 
          debugger
        }
    }); 
// 修改fileElementId

 nodejs

var form = new multiparty.Form();
  form.parse(req, function(err, fields, files){
    
    if(err){
      console.log('parse error:'+err);
    }else{
      var input_file = files.csv_import[0];
      var uploaded_path = input_file.path;
      var buf = new Buffer(1024*input_file.size);

      // 获取文件的内容,作为一个base,这里只是读取文件的内容,并没有存储
      fs.open(uploaded_path, 'r+', function(err, fd) {
         if (err) {
             return console.error(err);
         }
         fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
            if (err){
               console.log(err);
            }
            
            var a = buf.slice(0, bytes).toString().split('\r\n');
            var b = a.map(function(a_item){
              return a_item.split(',');             
            })

            console.log(util.inspect({b: b}));        

         });
      });
    }
  })

// 需要安装multiparty
// files.csv_import中的csv_import与id保持一致
// csv_import是id

注意:后端返回数据的方式

res.send(JSON.stringify({
            code: 0,
            msg: '导入成功'
          }));

 

使用ajaxfileupload和multiparty上传文件时,碰到了一个问题:上传后直径跳转到/a?file_upload=...,并没有按照res.redirect('/')来执行,好奇怪;success error也没有捕获到返回的数据。

 

posted on 2015-09-25 23:36  j.w  阅读(2763)  评论(0编辑  收藏  举报