diff --git a/apps/backend/config/middlewares.js b/apps/backend/config/middlewares.js index 70a54a2a1..077124c4e 100644 --- a/apps/backend/config/middlewares.js +++ b/apps/backend/config/middlewares.js @@ -5,8 +5,18 @@ module.exports = [ "strapi::poweredBy", "strapi::logger", "strapi::query", - "strapi::body", "strapi::session", "strapi::favicon", "strapi::public", + { + name: "strapi::body", + config: { + formLimit: "256mb", + jsonLimit: "256mb", + textLimit: "256mb", + formidable: { + maxFileSize: 250 * 1024 * 1024, + }, + }, + }, ]; diff --git a/apps/backend/config/plugins.js b/apps/backend/config/plugins.js new file mode 100644 index 000000000..b86c0907c --- /dev/null +++ b/apps/backend/config/plugins.js @@ -0,0 +1,9 @@ +module.exports = () => ({ + upload: { + config: { + provider: "local", + // 250MB + sizeLimit: 250 * 1024 * 1024, + }, + }, +}); diff --git a/apps/backend/package.json b/apps/backend/package.json index 7efd9ce22..c892540f0 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -22,6 +22,7 @@ "@strapi/plugin-i18n": "4.15.0", "@strapi/plugin-users-permissions": "4.15.4", "@strapi/provider-email-nodemailer": "^4.12.4", + "@strapi/provider-upload-local": "^4.15.4", "@strapi/strapi": "4.15.4", "nanoid": "^3.3.6", "pg": "^8.11.3", diff --git a/apps/frontend/src/components/tiptap.jsx b/apps/frontend/src/components/tiptap.jsx index 40a4b07ec..cfee70416 100644 --- a/apps/frontend/src/components/tiptap.jsx +++ b/apps/frontend/src/components/tiptap.jsx @@ -26,21 +26,12 @@ import Placeholder from "@tiptap/extension-placeholder"; import Link from "@tiptap/extension-link"; import { EditorContent, useEditor } from "@tiptap/react"; import StarterKit from "@tiptap/starter-kit"; -import { useCallback } from "react"; import Youtube from "@tiptap/extension-youtube"; import { Markdown } from "tiptap-markdown"; import Code from "@tiptap/extension-code"; import CharacterCount from "@tiptap/extension-character-count"; -function ToolBar({ editor }) { - const addImage = useCallback(() => { - const url = window.prompt("URL"); - - if (url) { - editor.chain().focus().setImage({ src: url, alt: "" }).run(); - } - }, [editor]); - +function ToolBar({ editor, user }) { const addYoutubeEmbed = () => { const url = window.prompt("URL"); @@ -61,6 +52,35 @@ function ToolBar({ editor }) { } }; + const handleImageSubmit = async (event) => { + event.preventDefault(); + + const apiBase = process.env.NEXT_PUBLIC_STRAPI_BACKEND_URL; + + const formData = new FormData(); + const image = document.getElementById("feature-image").files; + + // Handle the case where the user opts not to submit an image. + if (!image) return; + formData.append("files", image[0]); + + const res = await fetch(new URL("api/upload", apiBase), { + method: "post", + headers: { + Accept: "application/json", + Authorization: `Bearer ${user.jwt}`, + }, + body: formData, + }); + + const data = await res.json(); + + editor.commands.setImage({ + src: new URL(data[0].url, apiBase), + alt: "image", + }); + }; + return ( } />
-