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也没有捕获到返回的数据。