form异步上传附件内容

1 篇文章 0 订阅
1 篇文章 0 订阅

html代码:

<div class="layui-form-item">
    <label class="layui-form-label">上传附件</label>
      <div class="layui-input-block">
        <button type="button" class="customer" onclick="import_cvs();">选择文件</button><a href="../../upload/excel/hd_new_retail/goods.csv" target="_blank" class="customer">模板下载(goods.csv)</a>
      </div>
  </div>

js异步代码:

function import_cvs(){
      var input = $tag('input', {type: 'file'});
      $(input).click().on('change', function () {
          var file = this.files[0];
          //文件判断
          if (file.type != 'application/vnd.ms-excel' || file.name.match(/.csv$/).length < 0) {
              alert('请导入csv文件');
              return;
          }
          var in_action = $("select[name='in_action']").val();
          //获取数据
          var url = window.location.pathname + '?act=submit_import_goods';
          var data = new FormData;
          data.append('file', file);
          data.append('in_action', in_action);
          // console.log(url);
          //发送ajax请求
          $ajax(url, data, function (response) {
              if (response.message == 'ok') {
                  window.parent.load_parent();//执行父页面的事件 
                  var index = parent.layer.getFrameIndex(window.name);  
                  parent.layer.close(index);//关闭当前页
              } else {
                  alert(response.message)
              }
          })
      });
    }

ajax请求:

var canAjax = true;
  /**
 * ajax请求 ( 必须使用FormData )
 * @param requestUrl
 * @param formData
 * @param callback
 * @param progress
 * @returns {boolean}
 */
function $ajax(requestUrl, formData, callback, progress) {
    if (!canAjax) {
        return false;
    }
    canAjax = false;
    $.ajax({
        url: requestUrl,
        type: 'POST',
        data: formData,
        async:false,
        dataType: 'json',
        processData: false,
        contentType: false,
        success: function (data, textStatus) {
            canAjax = true;
            //console.log(data);
            //console.log(textStatus);
            if (typeof callback != 'undefined') {
                callback(data);
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            canAjax = true;
            console.log(XMLHttpRequest);
            console.log(textStatus);
            console.log(errorThrown);
            alert('系统出错:' + textStatus);
        },
        xhr: function () {
            var xhr = new window.XMLHttpRequest();
            if (typeof progress != 'undefined') {
                xhr.upload.addEventListener("progress", function (evt) {
                    if (evt.lengthComputable) {
                        var percent = parseInt(evt.loaded / evt.total * 100, 10);
                        progress(percent);
                    }
                }, false);
            }
            return xhr;
        }
    });

}

创建input为file的标签:

**
 * 创建html标签
 * @param tagName
 * @param attr
 * @param append
 * @returns {Element}
 */
function $tag(tagName, attr, append) {
    var tag = document.createElement(tagName);
    if (attr != undefined || !attr) {
        $(tag).attr(attr);
    }
    if (append != undefined || !append) {
        $(tag).append(append);
    }
    return tag;
}

后端php代码:

//提交导入数据
    public function submit_import_goods(){
        //获取数据
        $file = $_FILES['file'];
        $in_action = $_REQUEST['in_action'];
        if ($file['type'] != 'application/vnd.ms-excel' || stripos($file, '.csv') === false) {
            make_json_error('请上传正确的csv文件');
        }
        $handle = fopen($file['tmp_name'], 'r');
        $field = $this->import_field;
        $csv_arr = array();
        $row = 1;
        $goods_sn_arr = array();
        while ($data = fgetcsv($handle)) {
            $tmp_row = array();
            $i = 0;
            if ($row == 1) {
                $row++;
                continue;
            }
            //按照 数据库字段建立数组
            foreach ($field as $k => $v) {
                if($v == 'goods_sn' && !$data[$i]) break;
                $data[$i] = $this->model->delChar($data[$i]);

                @$tmp_row[$v] = trim(iconv('gbk', 'utf-8', $data[$i]));
                //                @$tmp_row[$v] = trim($data[$i]);
                $i++;
            }
            $goods_sn_arr[] = $tmp_row['goods_sn'];

            $tmp_row['in_action'] = $in_action;
            $csv_arr[] = "("."'" . join("','", $tmp_row) . "'".")";

        }
        fclose($handle);
        $csv_num = count($csv_arr);
        if( $csv_num <= 0 ){
            make_json_error('没有导入数据');
        }
        $sql = "select count(*) from hd_new_retail_goods where goods_sn in("."'" . join("','", $goods_sn_arr) . "'".")";
        $count = $this->db->getOne($sql);
        if($count == $csv_num){
            make_json_error('没有导入数据!请检查商品列表已存在货号');
        }
        $sql = "insert IGNORE INTO hd_new_retail_goods(goods_sn,goods_name,in_action) values ".implode(",",$csv_arr);
        $this->db->query($sql);

        make_json_result('', 'ok');
    }
//导入文件去掉特殊符号
    public function delChar($str){
        $str = str_replace("\t","",$str);
        $str = str_replace("'",'',$str);
        $str = str_replace('"','',$str);
        $str = str_replace("\r\n","",$str);
        $str = str_replace("\r","",$str);
        $str = str_replace("\n","",$str);
        $str = str_replace(array('&lt;','&gt;','br','/'),array(''),$str);
        $str = str_replace('&nbsp;','',$str);
        return $str;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值