最便捷的zblog实现ajax上传文件并调用
zblog简单方法实现ajax上传文件,只需要简单的操作即可实现,使用方法也是最便捷的,只需要使用下面的php和JavaScript代码复制到你的插件或主题中,将“你的插件ID”改为你实际的插件或主题的ID

录屏示例所用代码,上传成功后自动修改图片链接、自动填充到指定文本框
<button type=button onclick="upload.call(this, {img: '.meta_photo', input: '[name=meta_photo]'})">上传图片</button>php代码
Add_Filter_Plugin('Filter_Plugin_Cmd_Ajax','你的插件ID_Cmd_Ajax'); //挂载接口
function 你的插件ID_Cmd_Ajax($src){
global $zbp;
if ($src == '你的插件ID_upload'){
$json = array('code' => 1);
try {
if (!$zbp->CheckRights('UploadPst')) {
$zbp->ShowError(6);
}
$_POST['auto_rename'] = 1;
$upload = PostUpload(); //这里要求zblog版本在1.7以上
$json['data'] = array(
'url' => $upload->Url,
'size' => $upload->Size,
'name' => $upload->Name,
'sourceName' => $upload->SourceName
);
} catch (Exception $e) {
$json['code'] = 0;
$json['msg'] = $e->getMessage();
}
exit(json_encode($json));
}
}JavaScript代码
function upload(option){
var id = 'ajax_upload' + new Date().getTime();
var body = $('body');
var clickBtn = $(this);
var originText = clickBtn.text();
body.append(`<input type="file" id="${id}" accept="${option.accept}" style="display:none">`);
body.one('change', '#' + id, function(){
var form = new FormData();
form.append('file',$(this)[0].files[0]);
$.ajax({
url: ajaxurl + '你的插件ID_upload',
type: 'POST',
dataType: 'json',
data: form,
contentType: false,
processData: false,
xhr: function() {
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function (e) {
if (e.lengthComputable) {
var per = Math.floor(e.loaded / e.total * 100);
if (typeof option.progress === 'function'){
option.progress(per, clickBtn);
}else{
clickBtn.attr('disabled', true).text(`上传中...${per}%`);
}
}
});
return xhr;
},
success:function(res){
if (typeof option.success === 'function'){
option.success(res, clickBtn);
}else if(res.code == 0){
alert(res.msg);
}else if(res.code == 1){
var url = res.data.url;
if (option.img){
$(option.img).attr('src', url);
}
if (option.input){
$(option.input).val(url);
}
}
},
error:function(res){
if (typeof option.error === 'function'){
option.error(res, clickBtn);
}else{
alert('上传失败');
}
},
complete: function(){
clickBtn.attr('disabled', false).text(originText);
}
});
});
$('#' + id).click();
return false;
}调用方法
例一(仅允许上传指定文件类型并将图片url填充到指定文本框)
<button type="button" onclick="upload.call(this, {input: '[name=logo]', accept: '.png,.jpg,.jpeg'})">上传</button>
添加一个上传按钮,仅允许png jpg jpeg图片,上传成功后自动将图片url填充到 name=logo 的文本框例二(将上传后的图片链接填充到指定文本框,修改指定图片的src为图片链接)
<button type="button" onclick="upload.call(this, {input: '[name=banner]', img: '.catebanner', accept: '.png'})">上传</button>
添加一个上传按钮,仅允许png图片,上传成功后自动将图片url填充到 name=banner 的文本框,并且改变 .catebanner 图片的链接例三(自定义回调函数)
<button type="button" onclick="upload.call(this, {success: 'uploadSuccess', accept: '.png'})">上传</button>
<script>
function uploadSuccess(res, button){
alert('上传成功');
alert('图片链接:' + res.data.url);
}
</script>

