برنامه نویسی

پیاده سازی آپلود تصویر در React Quill

افزودن قابلیت آپلود تصویر یک نیاز رایج برای ویرایشگرهای متن غنی است، به ویژه هنگام ساخت ابزارهای ایجاد محتوا. React Quill، یک بسته بندی محبوب React برای QuillJS، به طور بومی از آپلود تصاویر پشتیبانی نمی کند. با این حال، می توانید این ویژگی را با سفارشی سازی ماژول ها و هندلرهای آن پیاده سازی کنید.

در این مقاله، نحوه افزودن قابلیت‌های آپلود تصویر به React Quill را بررسی خواهیم کرد که به کاربران اجازه می‌دهد تصاویر را مستقیماً در ویرایشگر آپلود کنند.


راه اندازی React Quill

قبل از اجرای آپلود تصویر، مطمئن شوید که React Quill نصب و پیکربندی شده است:

npm install react-quill
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک ویرایشگر اصلی React Quill را وارد و راه اندازی کنید:

import React, { useState } from 'react';
import ReactQuill from 'react-quill';
import 'react-quill/dist/quill.snow.css';

const Editor = () => {
  const [value, setValue] = useState('');

  return (
    <ReactQuill theme="snow" value={value} onChange={setValue} />
  );
};

export default Editor;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


اضافه کردن یک کنترل کننده آپلود تصویر

برای فعال کردن آپلود تصویر، باید نوار ابزار Quill را سفارشی کنیم و یک کنترل کننده تصویر را پیکربندی کنیم.

مرحله 1: نوار ابزار را سفارشی کنید

اضافه کردن یک دکمه تصویر به نوار ابزار:

const modules = {
  toolbar: [
    ['bold', 'italic', 'underline'],
    [{ list: 'ordered' }, { list: 'bullet' }],
    ['link', 'image'],
  ],
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: یک کنترل کننده تصویر سفارشی ایجاد کنید

کنترل کننده تصویر به کاربران اجازه می دهد تا یک فایل تصویری را آپلود کرده و آن را در ویرایشگر قرار دهند. در اینجا نحوه پیاده سازی آن آمده است:

const handleImageUpload = () => {
  const input = document.createElement('input');
  input.setAttribute('type', 'file');
  input.setAttribute('accept', 'image/*');

  input.addEventListener('change', async () => {
    const file = input.files[0];
    if (file) {
      const formData = new FormData();
      formData.append('image', file);

      // Replace with your API endpoint
      const response = await fetch('/api/upload', {
        method: 'POST',
        body: formData,
      });

      const data = await response.json();
      const imageUrl = data.url;

      const quill = this.quill;
      const range = quill.getSelection();
      quill.insertEmbed(range.index, 'image', imageUrl);
    }
  });

  input.click();
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 3: Handler را ثبت کنید

کنترل کننده را به پیکربندی ماژول ها منتقل کنید:

const modules = {
  toolbar: {
    container: [
      ['bold', 'italic', 'underline'],
      [{ list: 'ordered' }, { list: 'bullet' }],
      ['link', 'image'],
    ],
    handlers: {
      image: handleImageUpload,
    },
  },
};

const EditorWithImageUpload = () => {
  const [value, setValue] = useState('');

  return (
    <ReactQuill theme="snow" value={value} onChange={setValue} modules={modules} />
  );
};

export default EditorWithImageUpload;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


راه اندازی Backend برای آپلود تصویر

پشتیبان شما باید آپلود فایل را مدیریت کند و یک URL برای تصویر آپلود شده برگرداند. در اینجا یک مثال با استفاده از Node.js و Express آورده شده است:

const express = require('express');
const multer = require('multer');
const path = require('path');

const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/api/upload', upload.single('image'), (req, res) => {
  const file = req.file;
  const imageUrl = `/uploads/${file.filename}`; // Replace with your storage logic
  res.json({ url: imageUrl });
});

app.use('/uploads', express.static(path.join(__dirname, 'uploads')));

app.listen(3000, () => console.log('Server running on port 3000'));
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


سبک دادن به تصاویر آپلود شده

می توانید از CSS برای استایل دادن به تصاویر در ویرایشگر استفاده کنید. به عنوان مثال:

.ql-editor img {
  max-width: 100%;
  height: auto;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


نتیجه گیری

افزودن قابلیت آپلود تصویر به React Quill قابلیت استفاده آن را برای ایجاد محتوای غنی افزایش می دهد. با سفارشی کردن نوار ابزار و پیاده سازی یک کنترل کننده تصویر سفارشی، می توانید به کاربران اجازه آپلود و جاسازی یکپارچه تصاویر را بدهید. این را با یک پشتیبان قوی برای مدیریت آپلود فایل جفت کنید، و یک راه حل کاملا کاربردی برای برنامه خود خواهید داشت.


مراجع

  1. React Quill Documentation

  2. اسناد QuillJS

  3. مستندات مولتر
  4. آموزش React Quill

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا