پیاده سازی آپلود تصویر در 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 قابلیت استفاده آن را برای ایجاد محتوای غنی افزایش می دهد. با سفارشی کردن نوار ابزار و پیاده سازی یک کنترل کننده تصویر سفارشی، می توانید به کاربران اجازه آپلود و جاسازی یکپارچه تصاویر را بدهید. این را با یک پشتیبان قوی برای مدیریت آپلود فایل جفت کنید، و یک راه حل کاملا کاربردی برای برنامه خود خواهید داشت.
مراجع
-
React Quill Documentation
-
اسناد QuillJS
- مستندات مولتر
- آموزش React Quill