TinyMCE上传图片后端处理写法

写法有两种,一种是先把图片转换成base64后再本地解析显示,这样可以直接将图片储存在HTML文件中,如果图片过多可能会让HTML文件过大,或者你可以将已经转码成base64的图片上传到服务器后服务器再转码成原jpg或png格式。

另一种是方法是通过POST把图片传输给服务器后,服务器再返回图片地址我们再调用

第一种写法具体如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>TinyMCE图片上传测试</title>
    <script src="tinymce.min.js"></script>
    <script type="text/javascript">
        tinymce.init({
            selector: '#mytextarea',
            language: 'zh_CN',
            plugins: "image",
            toolbar: "image",
            images_dataimg_filter: function (img) {
                //添加图片渲染到编辑器中
                return img.hasAttribute('internal-blob');
            },
            paste_data_images: true,
            images_upload_handler: function (blobInfo, success, failure) {
                //将图片转码为base64格式
                success("data:" + blobInfo.blob().type + ";base64," + blobInfo.base64());
            }
        });
    </script>
</head>
<body>
    <textarea id="mytextarea"></textarea>
</body>
</html>

这样所有的图片都会以base64的方式存储在HTML文件中,如果需要上传到服务器中则可以在服务端这样写:

//NodeJS服务端:
app.post('/upload', function (req, res) {
    //接收前台POST过来的base64
    var imgData = req.body.imgData;
    var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");     //过滤data:URL
    var dataBuffer = new Buffer(base64Data, 'base64');       
    fs.writeFile("image.png", dataBuffer, function (err) {
        if (err) {
            res.send(err);
        } else {
            res.send("保存成功!");
        }
    });
});

第二种方法,先上传再调用

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>TinyMCE图片上传测试</title>
    <script src="tinymce.min.js"></script>
    <script type="text/javascript">
        tinymce.init({
            selector: '#mytextarea',
            language: 'zh_CN',
            plugins: "image",
            toolbar: "image",
            images_upload_base_path: 'dir', //图片存放目录
            images_upload_url: '/upload',   //上传地址
        });
    </script>
</head>
<body>
    <textarea id="mytextarea"></textarea>
</body>
</html>

后端图片处理:

var express = require("express");
var app = express();
var server = require("http").createServer(app);
var fs = require('fs');
var path = require('path');
var formidable = require('formidable');

app.use(express.static("public"));
var port = process.env.PORT || 3000;
server.listen(port, function () { console.log("connection") });

app.post('/upload', function (req, res, next) {
    var form = new formidable.IncomingForm();
    form.uploadDir = "./public/dir";
    form.maxFieldsSize = 4 * 1024 * 1024;  //用户头像大小限制为最大4M    
    form.keepExtensions = true;        //使用文件的原扩展名  
    form.parse(req, function (err, fields, file) {
        res.send({
            location: path.basename(file.file.path) //返回图片地址
        });
    });
});

这样每次上传新图片的时候服务器的dir文件夹就会收到一张新的图片

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个Vue demo,演示如何使用tinymce编辑器的`images_upload_handler`选项来上传图片并进行处理: ```vue <template> <div> <textarea ref="myTextarea"></textarea> </div> </template> <script> import tinymce from 'tinymce/tinymce' import 'tinymce/themes/silver/theme' import 'tinymce/plugins/image' export default { name: 'RichTextEditor', mounted() { const self = this tinymce.init({ selector: 'textarea', plugins: ['image'], images_upload_handler: function (blobInfo, success, failure) { self.uploadImage(blobInfo.blob(), success, failure) } }) }, methods: { uploadImage(file, success, failure) { // 在这里编写上传图片的代码 // 成功时调用success方法并传入图片的url // 失败时调用failure方法并传入错误信息 } } } </script> ``` 在这个示例中,我们使用了Vue和tinymce来创建一个富文本编辑器。在`mounted`方法中初始化了tinymce,并将`images_upload_handler`选项设置为一个函数,该函数会在上传图片时被调用。 在`images_upload_handler`函数中,我们调用了`uploadImage`方法,并将blob对象、成功回调函数和失败回调函数作为参数传递给它。在`uploadImage`方法中,我们可以编写自己的上传图片的代码,处理图片并返回图片的url。 请注意,`images_upload_handler`选项只适用于tinymce 5及以上版本。如果您使用的是较早的版本,您需要使用`file_picker_callback`选项来自定义文件选择器并上传图片

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值