TinyMCE上传图片教程

今天主要讲的是TinyMCE编辑器默认自带的图片上传,也就是TinyMCE上传单张图片教程,包括代码示例,主要是针对“图片 - 上传 - 拖放一张图片文件至此/浏览图像”这里:

TinyMCE上传图片

 

一、开启并配置TinyMCE图片上传功能

要使TinyMCE编辑器能够上传图片,需要如下几步:

 

第1步:上传图片,首先要启用图片插件

在plugins参数中把image加进去。

 

第2步:在工具栏显示图片工具按钮

在toolbar参数中把image加进去。

此时,点图片按钮是没有上传选项的,只能添加图片地址。

 

第3步:加入配置参数images_upload_url

此参数用于指定一个接受上传文件的后端处理程序地址,例如:

images_upload_url: '/demo/upimg.php',

 

如果返回的地址是相对路径,还有一个参数images_upload_base_path,可以给相对路径指定它所相对的基本路径。

images_upload_base_path: '/demo',

 

最后配置示例如下:

tinymce.init({
    selector: '#editor',
    language:'zh_CN',
    plugins: 'image',
    toolbar: 'image',
    images_upload_url: '/demo/upimg.php',
    images_upload_base_path: '/demo',
});

 

TinyMCE图片上传其它参数:

选项名称 说明
images_upload_url 指定上传图片的后端处理程序的URL。
images_upload_base_path 给返回的相对路径指定它所相对的基本路径。
images_upload_credentials 对images_upload_url中指定的地址调用时是否传递cookie等跨域的凭据。值为布尔值,默认false。
images_upload_handler 此选项允许你使用自定义函数代替TinyMCE来处理上传操作。该自定义函数需提供三个参数:blobInfo、成功回调和失败回调。

 

二、TinyMCE图片上传返回的JSON数据格式

后端返回给TinyMCE的JSON数据,形如这样:

{ location : "/demo/image/1.jpg" }

 

三、PHP TinyMCE图片上传 示例代码

以下使用PHP脚本示例如何接收TinyMCE传来的图片数据,并返回URL给TinyMCE。

 

注意1:

跨域问题:源文档重点对此进行了说明,如果TinyMCE和接受上传图片程序未在同一域名下,浏览器会因跨域问题而拒绝操作,后端程序返回结果时,需给浏览器一个允许跨域的指令,对于PHP,写法如下:

header('Access-Control-Allow-Origin: *');

这里的*代表允许所有,你可以换成你自己的域名(只能写一个)

 

一般是使用一个白名单数组,然后通过类似PHP里的 $_SERVER['HTTP_ORIGIN'] 判断是否跨域?以及请求是否在白名单内。

 

注意2:

TinyMCE图片上传表单里是没有显示name值的,但是,它也有一个默认的name="file"。例如:PHP处理图片上传可以用:

$_FILES['file']

 

upimg.php

<?php
/***************************************************
 * 数据来源白名单 *
 ***************************************************/
$accepted_origins = array("http://localhost", "http://192.168.1.1", "http://example.com");

/*********************************************
 * 设置图片保存的文件夹 *
 *********************************************/
$imageFolder = "images/";

reset ($_FILES);
$temp = current($_FILES);
if (!is_uploaded_file($temp['tmp_name'])){
  // 通知编辑器上传失败
  header("HTTP/1.1 500 Server Error");
  exit;
}

if (isset($_SERVER['HTTP_ORIGIN'])) {
  // 验证来源是否在白名单内
  if (in_array($_SERVER['HTTP_ORIGIN'], $accepted_origins)) {
    header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
  } else {
    header("HTTP/1.1 403 Origin Denied");
    exit;
  }
}

/*
  如果脚本需要接收cookie,在init中加入参数 images_upload_credentials : true
  并加入下面两个被注释掉的header内容
*/
// header('Access-Control-Allow-Credentials: true');
// header('P3P: CP="There is no P3P policy."');

// 简单的过滤一下文件名是否合格
if (preg_match("/([^\w\s\d\-_~,;:\[\]\(\).])|([\.]{2,})/", $temp['name'])) {
    header("HTTP/1.1 400 Invalid file name.");
    exit;
}

// 验证扩展名
if (!in_array(strtolower(pathinfo($temp['name'], PATHINFO_EXTENSION)), array("gif", "jpg", "png"))) {
    header("HTTP/1.1 400 Invalid extension.");
    exit;
}

// 都没问题,就将上传数据移动到目标文件夹,此处直接使用原文件名,建议重命名
$filetowrite = $imageFolder . $temp['name'];
move_uploaded_file($temp['tmp_name'], $filetowrite);

// 返回JSON格式的数据
// 形如下一行所示,使用location存放图片URL
// { location : '/your/uploaded/image/file.jpg'}
echo json_encode(array('location' => $filetowrite));

 

最终效果如下:

TinyMCE上传图片

 

总结:

关于后端TinyMCE图片上传具体的代码我就不多说了,你可以随意自己写,想怎么处理就怎么处理?只要返回的JSON数据格式正确就可以了。

付杰
  • ¥ 499.0元
  • 市场价:499.0元
  • ¥ 49.9元
  • 市场价:99.9元
  • ¥ 0.0元
  • 市场价:99.0元
  • ¥ 98.0元
  • 市场价:298.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: