TinyMCE用PHP处理批量上传多张图片和裁剪编辑后的保存

后端开发   发布日期:2023年05月27日   浏览次数:627

主要实现的功能是TinyMCE富文本编辑器用PHP处理后台上传的单张图片、批量上传多张图片、以及图片被裁剪翻转编辑后用PHP保存的方法。

网上关于如何处理TinyMCE单张上传图片,或是批量上传,再或是修改后的图片保存用PHP都好实现,但将三者放在一起应用的还真是没有,经过几天的测试终于实现了TinyMCE编辑器采用PHP后台保存单张、批量、编辑保存图片的功能代码,而且图片修改保存后都是覆盖保存,不会像网上示例那种编辑10次就生成10张图,我这个例子只保存1张图片,代码就分享在李雷PHP博客了,用的拿走。

tinymce.init配置:

  1. //单图和多图上传,截取图片后保存,跨域编辑图片不能操作
  2. images_upload_base_path: '',
  3. images_reuse_filename: true,//保持同一个图片名字,用于原图片编辑后知道同名可覆盖
  4. images_upload_handler: lilei_image_upload_handler,

处理上传图片和编辑图片保存的函数:

  1. function lilei_image_upload_handler (blobInfo, succFun, failFun) {//自定义插入图片函数 blobInfo: 本地图片blob对象, succFun(url|string): 成功回调(插入图片链接到文本中), failFun(string):失败回调
  2. var xhr, formData;
  3. var file = blobInfo.blob();//转化为易于理解的file对象
  4. xhr = new XMLHttpRequest();
  5. xhr.withCredentials = false;
  6. xhr.open('POST', 'upload_image.php');
  7. xhr.onload = function() {
  8. var json;
  9. //网络不通
  10. if (xhr.status != 200) {
  11. failFun('通讯异常: ' + xhr.status);
  12. return;
  13. }else{
  14. json = JSON.parse(xhr.responseText);//接收返回的JSON数据
  15. if (!json) {
  16. failFun('上传图片失败: ' + xhr.responseText);
  17. return;
  18. }else{
  19. if (json.code== 'success') {
  20. succFun(json.location);
  21. //console.log(json.location)
  22. } else {
  23. failFun('【上传失败】:' + json.message);
  24. }
  25. }
  26. }
  27. };
  28. xhr.onerror = function () {
  29. failFun('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);
  30. };
  31. formData = new FormData();
  32. if (!blobInfo.blob()['name']){//批量多图上传与图片编辑对象互斥,这里是非常重要的,网上多数都没有这点说明,也就不能实现批量上传图片与图片编辑后的保存兼容
  33. //console.log( blobInfo.filename())
  34. formData.append('file', file, blobInfo.filename() );
  35. }else{
  36. formData.append('file', file, blobInfo.blob()['name'] );
  37. //console.log( blobInfo.blob()['name'])
  38. }
  39. xhr.send(formData);
  40. }

upload_image.php代码:

  1. <?php
  2. header("Content-Type: text/html;charset=GB2312");
  3. header("Cache-control: private"); //开启网页表单缓存
  4. date_default_timezone_set ("PRC");//设置时区
  5. set_time_limit(0);
  6. ini_set('memory_limit','128M');
  7. error_reporting(0);
  8. function fileext($filename){
  9. return substr(strrchr($filename, '.'), 1);
  10. }
  11.  
  12. if ($_FILES["file"]["error"] !=4){//有文件
  13. $uppath="upload_file/image/".date("Y")."/"; //目录只能逐级检查并建立
  14. if(!file_exists($uppath)){
  15. mkdir($uppath,0777); //新建目录
  16. chmod($uppath,0777); //附加权限
  17. }
  18. $uppath=$uppath.date("m")."/"; //目录只能逐级检查并建立
  19. if(!file_exists($uppath)){
  20. mkdir($uppath,0777); //新建目录
  21. chmod($uppath,0777); //附加权限
  22. }
  23. $uppath=$uppath.date("d")."/";
  24. if(!file_exists($uppath)){
  25. mkdir($uppath,0777); //新建目录
  26. chmod($uppath,0777); //附加权限
  27. }
  28. $type=array("image/jpeg","image/pjpeg", "image/png","image/x-png", "image/gif");//设置允许上传文件的类型 "jpeg","png",后面image/png是为了兼容blob图片
  29. //备注:
  30. //blob文件截取后,返回为:blob,blob,image/png,C:\Windows\Temp\php11E0.tmp,0,337430
  31. if(!in_array($_FILES['file']['type'],$type)){//普通后缀 && blob格式图片
  32. echo '{"code":"error","message":"图片文件类型错误"}';
  33. exit;
  34. }
  35. if ($_FILES["file"]["size"] > 5*1024*1024){//20M
  36. echo '{"code":"error","message":"图片超过大小限制"}';
  37. exit;
  38. }
  39. $rand_name=md5(microtime().'-'.rand(1,9999999999));
  40. //用于imagetools工具,编辑图片后原图覆盖,避免改动一下就传一张新图
  41. if (!file_exists($uppath.$_FILES["file"]["name"])){//判断当前路径下是否有此文件
  42. $filePath =$uppath.md5($rand_name."19jp.com").".".strtolower(fileext($_FILES['file']['name']));
  43. }else{
  44. $filename=$_FILES["file"]["name"];//存在,用原路径覆盖
  45. $filePath =$uppath.$filename;
  46. }
  47. if ($_FILES["file"]["error"] > 0){
  48. echo '{"code":"error","message":"'.$_FILES["file"]["error"].'"}';
  49. exit;
  50. }else{
  51. move_uploaded_file($_FILES["file"]["tmp_name"],$filePath);
  52. echo '{"code":"success","location":"'.$filePath.'"}';
  53. exit;
  54. }
  55. }
  56. ?>


以上就是TinyMCE用PHP处理批量上传多张图片和裁剪编辑后的保存的详细内容,更多关于TinyMCE用PHP处理批量上传多张图片和裁剪编辑后的保存的资料请关注九品源码其它相关文章!