Maison > interface Web > js tutoriel > Méthode d'implémentation de téléchargement d'images dans l'éditeur d'arrière-plan keystone.js

Méthode d'implémentation de téléchargement d'images dans l'éditeur d'arrière-plan keystone.js

不言
Libérer: 2018-09-11 15:35:35
original
1864 Les gens l'ont consulté

Le contenu de cet article concerne la méthode de mise en œuvre du téléchargement d'images dans l'éditeur d'arrière-plan keystone.js. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

J'ai rencontré un problème lors de l'utilisation de Keystone : Keystone utilise Tinimce comme éditeur de texte enrichi en arrière-plan, mais il ne fournit que la fonction d'insertion d'images réseau et ne peut pas télécharger et gérer des images locales. Heureusement, Keystone propose des options. pour ajouter un plug-in pour tinymce

1. Ajouter un plug-in dans l'éditeur

1. Téléchargez le plug-in d'image

Téléchargez le plug-in et mettez-le dans le répertoire statique

2 . Configuration

Ajoutez les éléments de configuration suivants dans keystone.init() :

{
  'wysiwyg additional plugins': 'uploadimage',
  'wysiwyg additional buttons': 'uploadimage',
  'wysiwyg additional options': {
    'uploadimage_form_url': '/api/admin/upload-image', //上传图片的API
    'relative_urls': false,
    'external_plugins': { 'uploadimage': '/js/uploadimage/plugin.min.js' }, // 上传图片插件
  }
}
Copier après la connexion

2. API backend

1. Surveillez le routage

dans le fichier de routage Ajoutez le code suivant dans :

var router = express.Router();
var keystone = require('keystone');
var importRoutes = keystone.importer(__dirname);
var routes = {
  api: importRoutes('./api'),
};

router.post('/api/admin/upload-image', keystone.middleware.api, routes.api.upload_image);

module.exports = router;
Copier après la connexion

Nous mettons l'API dans api/upload_image.js Notez que la nouvelle API doit ajouter un keystone.middleware.apimiddleware.

2. Créez un nouveau domaine pour gérer les images

models/FileUpload.js :

var keystone = require('keystone');
var Types = keystone.Field.Types;

/**
 * File Upload Model
 * ===========
 * A database model for uploading images to the local file system
 */

var FileUpload = new keystone.List('FileUpload');

var myStorage = new keystone.Storage({
  adapter: keystone.Storage.Adapters.FS,
  fs: {
    path: keystone.expandPath('public/uploads'), // required; path where the files should be stored
    publicPath: 'uploads', // path where files will be served
  }
});

FileUpload.add({
  name: { type: Types.Key, index: true},
  file: {
    type: Types.File,
    storage: myStorage
  },
  createdTimeStamp: { type: String },
  alt1: { type: String },
  attributes1: { type: String },
  category: { type: String },      //Used to categorize widgets.
  priorityId: { type: String },    //Used to prioritize display order.
  parent: { type: String },
  children: { type: String },
  url: {type: String},
  fileType: {type: String}

});


FileUpload.defaultColumns = 'name';
FileUpload.register();
Copier après la connexion

3. Détails de l'API

api/upload_image.jsDétails de mise en œuvre :

var
  keystone = require('keystone'),
  fs = require('fs'),
  path = require('path');

var FileData = keystone.list('FileUpload'); 

module.exports = function (req, res) {
  var
    item = new FileData.model(),
    data = (req.method == 'POST') ? req.body : req.query;
  
  // keystone采用的老版multer来解析文件,根据req.files.file.path将文件从缓冲区复制出来
  fs.copyFile(req.files.file.path, path.join(__dirname, '../../public/uploads', req.files.file.name), function (err) {
    var sendResult = function () {
      if (err) {
        res.send({ error: { message: err.message } });
      } else {
        // 按插件要求的返回格式返回URL
        res.send({ image: {
          url: "\/uploads\/" + req.files.file.name
        } });
      }
    };

    // TinyMCE upload plugin uses the iframe transport technique
    // so the response type must be text/html
    res.format({
      html: sendResult,
      json: sendResult,
    });
  })
}
Copier après la connexion

Recommandations associées :

Demandez à l'éditeur ckeditor d'ouvrir le téléchargement de l'image et de télécharger l'erreur du fichier upload.php >

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal