跳到主要内容

TinyMCE上传图片后端处理写法

2 分钟阅读

开始

写法有两种,一种是先把图片转换成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文件夹就会收到一张新的图片

评论
0条评论

添加新评论

昵称
邮箱
网址