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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)