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

  • 相关阅读:
    1.1、Go快速入坟系列之循环与分支
    1.0、Go快速入坟系列之变量、常量与算术运算符
    0.0、Go快速入坟系列配置与安装Go环境
    使用Docker部署.Net Core项目
    留言板
    List实体中不同字段值的转换
    Yum安装,Linux自带Python卸载 安装
    CentOS7系统配置国内yum源和epel源
    Centos7安装jdk1.8
    VUE下载文件,下载后台返回的response
  • 原文地址:https://www.cnblogs.com/wang-jing/p/4839766.html
Copyright © 2011-2022 走看看