php ajaxfileupload上传文件操作,多文件,单文件

1,引入jquery.js  ajaxfileupload.js,百度自行下载

2,前端html代码,multiple属性可以一次性上传多个文件,也可以一个,有multiple属性时name要加[],如果仅仅上传单个文件,则去掉multiple属性,name属性去掉[]

    

 3,如果既要上传文件又要上传数据,类似下图,则要修改ajaxfileupload.js,看第4步

  

4,以下修改参照链接:http://t.zoukankan.com/gangbalei-p-6095146.html

  

  createUploadForm: function()方法修改后为:

    createUploadForm: function(id, fileElementId,data)
    {
      //create form
      var formId = 'jUploadForm' + id;
      var fileId = 'jUploadFile' + id;
      var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
      //默认
      var oldElement = $('#' + fileElementId);
      var newElement = $(oldElement).clone();
      $(oldElement).attr('id', fileId);
      $(oldElement).before(newElement);
      $(oldElement).appendTo(form);

      //add 可以传除了文件之外的数据
      if (data) {
        for (var i in data) {
          $('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
        }
      }
      //endadd
      //set attributes
      $(form).css('position', 'absolute');
      $(form).css('top', '-1200px');
      $(form).css('left', '-1200px');
      $(form).appendTo('body');
      return form;
  }

  调用该方法处修改为:var form = jQuery.createUploadForm(id, s.fileElementId,s.data); 

5,前端jq发起请求

let posturl = 'index.php?mod=amazonMessageReply&act=replyEmailMessageBySmtp';
let senddata = {
  mailtype:mailtype,
  sendAccount:sendAccount,
  sendSite:sendSite,
  sendMailbox:sendMailbox,
  receiveid:receiveid,
  subject:subject,
  content:emailcontent,
};
$.ajaxFileUpload ({
  url: posturl,
  method:'post',
  data:senddata,
  secureuri: false,
  fileElementId: 'autoSendFile',
  dataType: 'text',
  success: function (json,status){
    let data = jQuery.parseJSON(json);
    if (data.errCode == 200) {
      alertify.success(data.msg,1000);
      window.location.reload();
    }else{
      alertify.error(data.msg);
    }
  },
  error: function (data, status, e){
    console.log(data.responseText,status);
  }
});

 

 6,后端接收数据用_POST,接收文件用_FILES,注意 autoSendFile 为html文件的id属性

 

 7,处理文件函数

//处理函数1

function handleSubmitFileData($filesInfo=[],$serviceId=0,$field='file',$attaData=[]){
  $res = [];
  $count = count($filesInfo[$field]['error']);
  for($i=0;$i<$count;$i++){
    $filename = $filesInfo[$field]["name"][$i];
    $tmpName = $filesInfo[$field]['tmp_name'][$i];
    $attach_size = $filesInfo[$field]['size'][$i];
    $error = $filesInfo[$field]['error'][$i];
    $prefix = end(explode('.', $filename));

    $type = ['pdf'];
    if(!in_array($prefix, $type)){
      $msg = array('code'=>10086, 'msg'=>'文件格式只允许pdf后缀,请重新上传文件','html'=>$attaData);
      echo json_encode($msg);
      exit;
    }
    switch ($error){
      case '0' :
        if($attach_size>10485760){
        $msg = array('code'=>10086, 'msg'=>'附件大小不能超过10M!','html'=>$attaData);
        echo json_encode($msg);
        exit;
      }
      break;
      case '1' :
        $msg = array('code'=>10086, 'msg'=>'超过了附件大小php.ini中即系统设定的大小!','html'=>$attaData);
        echo json_encode($msg);
        exit;
        break;
      case '2' :
        $msg = array('code'=>10086, 'msg'=>'超过了附件大小MAX_FILE_SIZE 选项指定的值!','html'=>$attaData);
        echo json_encode($msg);
        exit;
        break;
      case '3' :
        $msg = array('code'=>10086, 'msg'=>'附件只有部分被上传!','html'=>[]);
        echo json_encode($msg);
        exit;
        break;
      case '4' :
        $msg = array('code'=>10086, 'msg'=>'没有附件被上传!','html'=>$attaData);
        echo json_encode($msg);
        exit;
        break;
      case '5' :
        $msg = array('code'=>10086, 'msg'=>'上传附件大小为0!','html'=>$attaData);
        echo json_encode($msg);
        exit;
        break;
      }
}
for($i=0;$i<$count;$i++){
  $filename = $filesInfo[$field]["name"][$i];
  $tmpName = $filesInfo[$field]['tmp_name'][$i];
  $attach_size = $filesInfo[$field]['size'][$i];
  $error = $filesInfo[$field]['error'][$i];
  if(!empty($serviceId)){
    $res[] = handUploadFile($serviceId,$filename,$tmpName);
  }else{
    $res[$filename] = $tmpName;
  }
}
return $res;
}

//处理函数2

function handUploadFile($serviceId,$filename,$tmpName,$type=0){
  $retData = [];
  $atpath = WEB_PATH.'html/upload/amazon/batchsendmail/'.date("Y-m-d").'/';
  if (!is_dir($atpath)) {
    mkdir($atpath, 0777, true);
  }
  //$atpath = $atpath.$serviceId.$filename;
  $atpath = $atpath.$filename;
  $moveRes = move_uploaded_file($tmpName,$atpath);
  sleep(1);
  //if($moveRes){//一般不注释,多个账号同时添加时可注释,生成日志记录,因为同一个文件已经被移动了,第二次移动时这个值为假
    $retData['id'] = $serviceId;
    $retData['attachmentname'] = $filename;
    $retData['attachmentpath'] = $atpath;
    $msg_obj = new amazonmessageModel();
    $res = $msg_obj->insertAttachPath($retData,'msg_sendmailattachment','service_id',$type);
    if($res){
      return $retData;
    }
    // }else{
    // return [];
   // }
}

8,end

 

posted @   u-ttXY  阅读(665)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示