最近因写一个上传功能,不能刷新页面,且页面得有后台返回的信息,因而不能使用form直接提交表单,尝试使用is提交并接受返回数据,不多说代码如下:
前台:
<form id='pdf-form' enctype="multipart/form-data" method="POST" action="" >
<input type="hidden" name="order_id" value="<{$order.order_id}>">
<table align="center" width="90%" border="0">
<tr>
<td><b>合同信息:</b>
<a target="_self" href="<{link app=b2c ctl=site_paycenter act=download arg0=$contract_no}>" class="active">下载</a></td>
<{if $sign ==1}>
<td>
<input type="file" name="inputpdf" id="inputpdf">
<{button id="button" onclick="upload(this);" class="btn-import" label="合同上传"}>
<span id="span" class="success notice-inline">上传成功!</span>
</td>
<{/if}>
</tr>
</table>
</form>
js:
function upload(o){
var data = new FormData(document.getElementById('pdf-form'));
data.append('CustomFile','this is data');
var PDF = new XMLHttpRequest();
PDF.open("post",'<{link app=b2c ctl=site_paycenter act=uploadFile}>',true);
PDF.onload = function(){
if(PDF.status == 200){
re =JSON.decode(PDF.responseText);
console.log(re);
if( re.rsp == 'succ'){
document.getElementById('button').style.display= 'none';
document.getElementById("span").innerHTML=re.res;
document.getElementById('span').style.display= '';
// document.getElementById("url").href='.'+re.url;
}else{
document.getElementById("span").innerHTML=re.res;
document.getElementById('span').style.display= '';
}
}
};
PDF.send(data);
}
后台处理以及返回信息:
function uploadFile()
{
$file = $_FILES['inputpdf']['name'];
$filetempname = $_FILES['inputpdf']['tmp_name'];
$filelist = explode('.',$file);
$type = end($filelist);
if($type != 'pdf'){
$return = array (
'rsp' => 'fail',
'res' => '请上传pdf文件!',
);
echo json_encode($return);exit;
}
//自己设置的上传文件存放路径
$filePath = './public/pdf/';
$contract_name = $file;
$string_md5 = md5 (md5($contract_name).time());
$front_string = substr ($string_md5 ,0 ,31 );
$contract_url = 's'.$front_string.'.pdf'; //pdf名称
$uploadfile = $filePath .$contract_url;//上传后的文件名地址
//move_uploaded_file() 函数将上传的文件移动到新位置。若成功,则返回 true,否则返回 false。
$result = move_uploaded_file($filetempname, $uploadfile);//假如上传到当前目录下
if($result == true){
$orders = app::get('b2c')->model('orders')->getList('contract_no', array('order_id'=>$_POST['order_id'])); //获取用户发票信息
$contracts = app::get('b2c')->model('contract_list')->getList('*', array('contract_no'=>$orders[0]['contract_no'])); //获取用户默认收货地址
$contract_no = $orders[0]['contract_no'];
$delfile = $contracts[0]['contract_url'];
$contracts[0]['contract_url'] = $uploadfile;
$contracts[0]['contract_name'] = $contract_name;
$contracts[0]['uptime'] = date('Y-m-d H:i:s',time());
// unset($contracts[0]['id']);
$flag = app::get('b2c')->model('contract_list')->update($contracts[0],array('id'=> $contracts[0]['id']));
if($flag){
if(file_exists($delfile)){
unlink($delfile);
}
$return = array (
'rsp' => 'succ',
'url' => "/paycenter-download-$contract_no.html",
'res' => '上传成功!',
);
echo json_encode($return);exit;
}
}else{
$return = array (
'rsp' => 'fail',
'res' => '上传失败!',
);
echo json_encode($return);exit;
}
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。