TinyMCE用Ajax上传多附件插件及后台PHP接收存储文件的示例
更新:2022-11-04 08:45:24
人气:1717
来源:本站原创
A+
TinyMCE多附件上传(attachment插件)官方虽然有示例,但没有具体的PHP后端接收采用Ajax方法POST过来的文件或图片数据及验证和存储的示例代码。网上也是找了很多,关于PHP与TinyMCE配合使用的例子太少而且分享的代码也很混乱,讲不到点儿上,所以再懒也只能自己动手,经过几次优化此插件达到了自己想要的效果。
改进后:
1.上传返回结果中增加了失败的提示,有弹出对话框和红色删除线;
2.多附件上传改进了堆叠在一起的效果,改为以段落方式一行一个附件,看上去内容整齐;
3.增加了PHP接收数据并存储数据的示例代码;

具体配置方式及PHP代码如下:
A、初始化tinymce.init,其他插件自行补充
tinymce.init({
plugins: "attachment",....
toolbar: [
'attachment' ...B、核心处理上传附件的JS代码:
//附件上传
//attachment_max_size: 20 * 1024 * 1024,//20M //取消这里的提示,用PHP程序反馈结果
attachment_assets_path: 'plugins/attachment/icons',
attachment_upload_handler: function(file, succFun, failFun, progressCallback) {
var data = new FormData();
data.append("file", file);
$.ajax({
data: data,
type: 'POST',
url: 'upload_file.php',//此文件在后面给出
//header:{'Content-Type':'multipart/form-data'},
dataType: 'json',
async: false,
//这是重要的一步,防止重复提交的
cache: false,
//设置为false,上传文件不需要缓存。
contentType: false,
//设置为false,因为是构造的FormData对象,所以这里设置为false。
processData: false,
//设置为false,因为data值是FormData对象,不需要对数据做处理。
xhr: xhrOnProgress(function(e) {
const percent = (e.loaded / e.total * 100 | 0) + '%'; //计算百分比
progressCallback(percent);
}),
}).then(function(data) {
if (data.code == 'success') {
succFun(data.data);
} else {
failFun('【上传失败】:' + data.data);
tinymce.activeEditor.notificationManager.open({ //success 成功info 普通信息warning 警告信息error 错误信息
text: '有部分附件上传失败,请您确认!',
type: 'error',
timeout: 5000,
closeButton: true,
});
}
}).fail(function(data) {
failFun('【上传异常】:' + data.data)
});
},C、PHP后台处理代码(upload_file.php):
<?php
function fileext($filename){
return substr(strrchr($filename, '.'), 1);
}
if ($_FILES["file"]["error"] !=4){//有文件
$uppath="upload_file/file/".date("Y")."/"; //目录只能逐级检查并建立
if(!file_exists($uppath)){
mkdir($uppath,0777); //新建目录
chmod($uppath,0777); //附加权限
}
$uppath=$uppath.date("m")."/"; //目录只能逐级检查并建立
if(!file_exists($uppath)){
mkdir($uppath,0777); //新建目录
chmod($uppath,0777); //附加权限
}
$uppath=$uppath.date("d")."/";
if(!file_exists($uppath)){
mkdir($uppath,0777); //新建目录
chmod($uppath,0777); //附加权限
}
$type=array("gif", "jpg", "jpeg", "png", "pdf", "txt", "zip", "rar", "7z", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "mp3", "mp4");//设置允许上传文件的类型 "jpeg","png"
if(!in_array(strtolower(fileext($_FILES['file']['name'])),$type)){
echo '{"code":"error","data":"文件类型错误"}';
exit;
}
if ($_FILES["file"]["size"] > 2*1024*1024){//20M
echo '{"code":"error","data":"附件超过大小限制"}';
exit;
}
$filename=md5(time());
$filePath =$uppath.md5($filename."mdaima.com").".".fileext($_FILES['file']['name']);
if ($_FILES["file"]["error"] > 0){
echo '{"code":"error","data":"'.$_FILES["file"]["error"].'"}';
exit;
}else{
move_uploaded_file($_FILES["file"]["tmp_name"],$filePath);
echo '{"code":"success","data":"'.$filePath.'"}';
exit;
}
}
?>最后将attachment插件修改后的文件附上链接:
链接:https://pan.baidu.com/s/1GtZVMpIt-LdGxm3FjE-Bcg?pwd=qgqm
提取码:qgqm
推荐的文章
随手记
- ● 统信UOS系统如何设置指定时间自动重启系统的方法
- ● 自制(IP或域名)可信任的SSL证书,适用360、chrome等浏览器
- ● windows系统下php无法使用curl怎么办?
- ● 绿联UGREENKVM切换器(分屏器)快捷键丢失解决办法
- ● 统信UOS开机指定网址全屏启动自带浏览器以及屏蔽ALT+F4关闭
- ● xshellSSH连接Linux服务器防止超时退出
- ● php8开启OpenSSL扩展库报错disabledinstallext
- ● 统信系统linux安装php时的报错libxml-2.0>=2.7.6
- ● tidb关闭sql_mode=ONLY_FULL_GROUP_BY模式
- ● windows10如何开机自动运行bat文件
PHP经验分享
- ● PHP批量对TCP服务端指定多个IP非阻塞检查在线状态
- ● python实现TCP服务端持续接收关机、重启指令并输出结果【系列三】
- ● PHP给TCP服务端发送指令【系列二】
- ● PHP判断TCP服务端是否在线【系列一】
- ● PHP判断远程文件是否存在
- ● LINUX下用PHP获取CPU型号、内存占用、硬盘占用等信息代码
- ● PHP代码用UDP方式远程唤醒电脑让计算机开机
- ● apache下php生成验证码图片不能显示
- ● PHP使用AES加密解密示例(无偏移)
- ● Pluginmysql_native_passwordreported:''mysql_native_password'isdeprecate问题








