mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-06 19:06:02 +03:00
Support base64 image upload via page POST/PUT markdown content #2369
Closed
opened 2026-02-05 03:49:27 +03:00 by OVERLORD
·
14 comments
No Branch/Tag Specified
development
further_theme_development
l10n_development
release
llm_only
vectors
v25-11
docker_env
drawio_rendering
user_permissions
ldap_host_failover
svg_image
prosemirror
captcha_example
fix/video-export
v25.12.3
v25.12.2
v25.12.1
v25.12
v25.11.6
v25.11.5
v25.11.4
v24.11.4
v25.11.3
v25.11.2
v25.11.1
v25.11
v25.07.3
v25.07.2
v25.07.1
v25.07
v25.05.2
v25.05.1
v25.05
v25.02.5
v25.02.4
v25.02.3
v25.02.2
v25.02.1
v25.02
v24.12.1
v24.12
v24.10.3
v24.10.2
v24.10.1
v24.10
v24.05.4
v24.05.3
v24.05.2
v24.05.1
v24.05
v24.02.3
v24.02.2
v24.02.1
v24.02
v23.12.3
v23.12.2
v23.12.1
v23.12
v23.10.4
v23.10.3
v23.10.2
v23.10.1
v23.10
v23.08.3
v23.08.2
v23.08.1
v23.08
v23.06.2
v23.06.1
v23.06
v23.05.2
v23.05.1
v23.05
v23.02.3
v23.02.2
v23.02.1
v23.02
v23.01.1
v23.01
v22.11.1
v22.11
v22.10.2
v22.10.1
v22.10
v22.09.1
v22.09
v22.07.3
v22.07.2
v22.07.1
v22.07
v22.06.2
v22.06.1
v22.06
v22.04.2
v22.04.1
v22.04
v22.03.1
v22.03
v22.02.3
v22.02.2
v22.02.1
v22.02
v21.12.5
v21.12.4
v21.12.3
v21.12.2
v21.12.1
v21.12
v21.11.3
v21.11.2
v21.11.1
v21.11
v21.10.3
v21.10.2
v21.10.1
v21.10
v21.08.6
v21.08.5
v21.08.4
v21.08.3
v21.08.2
v21.08.1
v21.08
v21.05.4
v21.05.3
v21.05.2
v21.05.1
v21.05
v21.04.6
v21.04.5
v21.04.4
v21.04.3
v21.04.2
v21.04.1
v21.04
v0.31.8
v0.31.7
v0.31.6
v0.31.5
v0.31.4
v0.31.3
v0.31.2
v0.31.1
v0.31.0
v0.30.7
v0.30.6
v0.30.5
v0.30.4
v0.30.3
v0.30.2
v0.30.1
v0.30.0
v0.29.3
v0.29.2
v0.29.1
v0.29.0
v0.28.3
v0.28.2
v0.28.1
v0.28.0
v0.27.5
v0.27.4
v0.27.3
v0.27.2
v0.27.1
v0.27
v0.26.4
v0.26.3
v0.26.2
v0.26.1
v0.26.0
v0.25.5
v0.25.4
v0.25.3
v0.25.2
v0.25.1
v0.25.0
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.2
v0.23.1
v0.23.0
v0.22.0
v0.21.0
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.0
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.15.3
v0.15.2
v0.15.1
v0.15.0
v0.14.3
v0.14.2
v0.14.1
v0.14.0
v0.13.1
v0.13.0
v0.12.2
v0.12.1
v0.12.0
v0.11.2
v0.11.1
v0.11.0
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
0.7.2
v.0.7.1
v0.7.0
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
Labels
Clear labels
🎨 Design
📖 Docs Update
🐛 Bug
🐛 Bug
:cat2:🐈 Possible duplicate
💿 Database
☕ Open to discussion
💻 Front-End
🐕 Support
🚪 Authentication
🌍 Translations
🔌 API Task
🏭 Back-End
⛲ Upstream
🔨 Feature Request
🛠️ Enhancement
🛠️ Enhancement
🛠️ Enhancement
❤️ Happy feedback
🔒 Security
🔍 Pending Validation
💆 UX
📝 WYSIWYG Editor
🌔 Out of scope
🔩 API Request
:octocat: Admin/Meta
🖌️ View Customization
❓ Question
🚀 Priority
🛡️ Blocked
🚚 Export System
♿ A11y
🔧 Maintenance
> Markdown Editor
pull-request
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/BookStack#2369
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @horshack on GitHub (Aug 28, 2021).
Describe the feature you'd like
I would like to have an example in the API-documentation how to create a new page with a picture included in the middle of the text.
In
https://bookstack.mydomain.local/api/docs#pages-create
I find:
While reading issues in github Dan Brown told that it's not a good idea to include pictures with base64 in the markdown-files because it is not good style to include blobs in the database-tables.
Describe the benefits this feature would bring to BookStack users
Transfering webpages with Bookstack-API to transfer many markdown-files would be possible.
@ssddanbrown commented on GitHub (Aug 28, 2021):
Hi @horshack,
Base64 within content is the correct way to go when uploading HTML page content. These images are extracted into file-based references upon upload negating any of my old advisories not to upload base64 content.
Updating page content via markdown does not currently have the same ability. If desired I could update the title of this issue to re-focus it on adding support for base64 images to be uploaded within Markdown content.
@horshack commented on GitHub (Aug 28, 2021):
Could you please show us an example how to include an image with the exact syntax to use in markdown please?
I my experiments I was able to do this in the editor with copy and paste, but it was not shown in the resulting page.
Thanks for your precious work.
Richard
@horshack commented on GitHub (Aug 28, 2021):
Sorry, I did not read your answer careful enough:
Is there a reason for this split of behaviour?
I think this behaviour should be documented at least with one sentence in
https://bookstack.mydomain.local/api/docs#pages-create
Thanks,
Richard
@horshack commented on GitHub (Aug 28, 2021):
In HTML the part with the image has to look like this:
I took the approach like this in my perl-programm to upload the markdown via API:
@horshack commented on GitHub (Aug 28, 2021):
After experimenting today with this solution I found out that converting the document from Markdown to HTML before uploading was not a good idea. It is hard to change texts in HTML by the user later, simply because html is much harder to edit than markdown.
The images are now in Bookstack but for the price of having documents which are very hard to edit. I am not able to go this way. I wish there would be a way to upload the markdown-documents and images somehow directly via the API.
@ssddanbrown commented on GitHub (Aug 28, 2021):
Hi @horshack,
The base64 image upload within page content is a fairly new feature, and it has not yet been rolled out nor requested for markdown content. As per my message above:
Since it sounds like you do want that feature I'll update this issue accordingly.
@horshack commented on GitHub (Aug 29, 2021):
Yes, please update the subject to make it a request for a new feature in the bookstack software.
Thanks for your help,
Richard
@Kaligule commented on GitHub (Sep 1, 2021):
Disclaimer: I have not worked with this API, nor do I know anything about API design.
Is this really the easiest way this API could work with images?
It looks unnatural to me:
So I would like to suggest 2 alternative ways on how images in pages could be handled by the api.
alternatives
I assume that people who want to create a page have a content as a markdown/html file which references image files with the typical markdown/html syntax (
/<img src="path/to/imagefile.png" alt="alt text">) and the images for that. Both the content and the images would be local files:Idea: pull out the encoded file into it's own parameter
The api parameters of a post/put request could look like is:
BockStack could then save the assets and change the link to the image in the markdown/html to whatever bookstack uses internally.
If the images referenced in the content and the assets provided don't match Bookstack could return a status code that tells the user about that.
This solution is cool because it doesn't require the user to mesh together assets and content himself.
Idea: Let attachments be their own api object
Just like shelves, books, chapters, pages, you could have an
/api/assetsendpoint that deals specifically with images and the like. You post the assets and get back a link to the asset. The pages would then just reference the assets as urls.This would allow great flexibility and extensibility in the work with assets. It might be a bit overengineered though. Perhaps Bookstack doesn't want to be that kind of cms? Or it does?
@horshack commented on GitHub (Sep 1, 2021):
In fact, the API is not yet ready. The extension of the API about "attachment" are good. Attachments like pictures (directly shown in the page) or attachments linked to in pages.
I would like to create pages from directories with Markdown-files I own. And I have to program (in perl, my language) to manipulate my markdown-files to include base64-contents. This would be ok with me.
In the end the base64-content is getting separated from bookstack and changed to links to external file/image-objects. So when getting the article back from the frontend there will be a link to a separate object in bookstack.
@ssddanbrown commented on GitHub (Sep 1, 2021):
@Kaligule
As @horshack has mentioned above, base64 would not remain in pushed markdown, It'll get extracted out to uploaded files by BookStack. This is more of a convenience feature and adding markdown support just aligns it with the HTML option.
I'd expect we'd still add a set of focused, specific, image API endpoints at some point in the future.
@ssddanbrown commented on GitHub (Oct 18, 2021):
Thanks again for raising @horshack,
This has now been implemented in
cb45c53029and will be part of the next feature release.Just a note on parsing:
The implementation is quite simplistic and will generally look for the pattern:
Where the base64 image data parsing is terminated by a closing round bracket, quote mark or whitespace. Therefore the base64 content is expected to all be on a single line without any whitespace. This is to keep the implementation simple & performant while respecting certain markdown image syntax options (Such as including title text). This does not support markdown reference links.
@horshack commented on GitHub (Oct 18, 2021):
Dan, thank you very much for your great work. It’s a pleasure for me to support you.
Sincerly from Bavaria
Richard
Von meinen Handy gesendet. Rechtschreibfehler und die Kürze der Nachricht sind der Situation geschuldet.
@SteveDinn commented on GitHub (Feb 6, 2022):
I'm trying this today in v21.12.4 and it's not working for me. My markdown containing the base64 text is remaining in the body of the page and is NOT being converted to a normal image link.
My markdown consists of something similar to this:
The page is created, but when I view it, it shows no image, and when I edit it, it shows the full multi-megabyte base64 string. It actually renders the image after nearly a minute of sitting there, but I was under the impression that it would automatically parse the base64 data out and store it as an image in the gallery.
Should I open a new issue for this?
@ssddanbrown commented on GitHub (Feb 6, 2022):
@SteveDinn Yeah, done some testing based upon your comment. It would indeed fail with larger images due to hitting limits. Have opened #3249 with my findings to address. Apologies for this, My implementation for markdown was a little too simplistic.