zoukankan      html  css  js  c++  java
  • 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('
    ');
                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也没有捕获到返回的数据。

  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/wang-jing/p/4839766.html
Copyright © 2011-2022 走看看