【问题标题】:How to configure tinymce image upload with mongoose express? and hopefully to cloudinarymongoose express如何配置tinymce图片上传?并希望多云
【发布时间】:2018-09-22 20:41:10
【问题描述】:

https://www.tinymce.com/docs/configure/file-image-upload/

这是我将图像从表单获取到云端的设置,但我不知道如何将图像从 tinymce 获取到 req.body 中,或者即使有可能?

我可以使用tinymce.init({})tinymce.activeEditor.uploadImages() 甚至tinymce.activeEditor.uploadImages(function(success) {}) 吗?

架构

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;

const docSchema = new mongoose.Schema({
  image_url: [String],
});
module.exports = mongoose.model('Doc', docSchema);

表格

form(action="/add" method="POST" class="card" enctype="multipart/form-data")
  label(for="image") image: 
  input(type="file" multiple='multiple' name="image" id="image" accept="image/gif, image/png, image/jpeg")

路由/index.js

const express = require('express');
const router = express.Router();
const myController = require('../controllers/myController');

router.get('/', myController.showDocs);
router.get('/add', myController.addDoc);

router.post('/add',
  myController.upload,
  myController.imageURL,
  myController.createDoc
);

module.exports = router;

myControllers.js

const mongoose = require('mongoose');
const Doc = mongoose.model('Doc');
const multer = require('multer');
const jimp = require('jimp');
const cloudinary = require('cloudinary');
const cloudinaryStorage = require('multer-storage-cloudinary');


cloudinary.config({
  cloud_name: process.env.CLOUD_NAME,
  api_key: process.env.CLOUD_API_KEY,
  api_secret: process.env.CLOUD_SECRET
});

const storage = cloudinaryStorage({
  cloudinary: cloudinary,
  folder: 'node_upload',
  allowedFormats: ['jpg', 'png'],
  filename: function (req, file, cb) {
    cb(undefined, uuid.v4());
  }
});
const multerOptions = {
  storage: storage,
  fileFilter(req, file, next) {
    const image = file.mimetype.startsWith('image/');
    if(image) {
      next(null, true);
    } else {
      next({ message: 'That filetype isn\'t allowed!' }, false);
    }
  }
};
exports.upload = multer(multerOptions).array('image');

exports.imageURL = (req, res, next) => {
  if (!req.files) {
    next(); // skip to the next middleware
    return;
  }
  image_url = [];
  for (var i = 0; i < req.files.length; i++) {
      image_url.push(req.files[i].url)
  }
  req.body.image_url = image_url;
  next();
}


exports.createDoc= async (req, res) => {
  const doc = new Doc(req.body);
  await doc.save();
  res.redirect('/');
};

【问题讨论】:

    标签: express mongoose tinymce cloudinary


    【解决方案1】:

    如果您将二进制图像(Base64、BLOB 等)插入 TinyMCE,您可以将编辑器配置为将其发送到您喜欢的任何位置。该过程记录在这里:

    https://www.tinymce.com/docs/advanced/handle-async-image-uploads/

    有多种方法可以将图像注入 TinyMCE,包括粘贴和通过文件选择器。在插入图像后配置 TinyMCE 以解决此问题意味着无论图像如何进入编辑器,您只需处理一次。

    【讨论】:

    • 谢谢,我已经浏览了文档,但无论如何我都看不到将图像放入 req.body 然后以快递方式使用它们。我有我的服务器端上传处理程序脚本(multer,jimp)正在运行,但它只拾取 req.body 中的文件。我试过这个 [codexworld.com/add-local-file-picker-to-image-dialog-in-tinymce/… 会破坏图像但仍将其保存为文本区域的一部分
    • TinyMCE 会将图像(插入时)发布到您配置的 URL。文档中有一个后处理脚本的示例。该图像不是表单发布的一部分 - 它在插入时发布。您的服务器代码可以根据需要处理该图像。编辑器并不关心什么类型的服务器代码处理图像,只要它返回它需要的 JSON。
    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 2011-07-06
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多