ExamplesBackendUpload Files

Upload Files

This example allows users to upload files and use them in the editor. For simplicity, files are encoded as data URLs rather than uploaded to a server, but you'd swap the uploadFile function for an upload to your own backend. The uploaded files can be used for File, Image, Video, and Audio blocks.

Try it out: Click the "Add Image" button and see there's now an "Upload" tab in the toolbar!

Relevant Docs:

import { uploadFile_DEV_ONLY } from "@blocknote/core";import "@blocknote/core/fonts/inter.css";import { useCreateBlockNote } from "@blocknote/react";import { BlockNoteView } from "@blocknote/mantine";import "@blocknote/mantine/style.css";// "Uploads" a file using BlockNote's dev-only helper, which encodes it as a// base64 data URL. We add a short delay first to simulate the latency of a real// server upload. In a real app you'd replace this with an upload to your own// backend that returns a URL to the stored file.async function uploadFile(file: File) {  await new Promise((resolve) => setTimeout(resolve, 1000));  return uploadFile_DEV_ONLY(file);}export default function App() {  // Creates a new editor instance.  const editor = useCreateBlockNote({    initialContent: [      {        type: "paragraph",        content: "Welcome to this demo!",      },      {        type: "paragraph",        content: "Upload an image using the button below",      },      {        type: "image",      },    ],    uploadFile,  });  // Renders the editor instance using a React component.  return <BlockNoteView editor={editor} />;}