mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-08 11:19:36 +03:00
can't update new cover of shelf and book by API token #5490
Closed
opened 2026-02-05 10:06:45 +03:00 by OVERLORD
·
3 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
No Label
🔩 API 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#5490
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 @shmbatom on GitHub (Nov 11, 2025).
API Endpoint or Feature
I failed to update the cover of shelf
I learned API Doc as below:
PUT
http://192.168.0.101/api/shelves/{id}
update
Update the details of a single shelf. An array of books IDs can be provided in the request. These will be added to the shelf in the same order as provided and overwrite any existing book assignments. The cover image of a shelf can be set by sending a file via an 'image' property within a 'multipart/form-data' request. If the 'image' property is null then the shelf cover image will be removed.
Body Parameters
Param Name Value Rules
name string min:1 max:255
description string max:1900
description_html string max:2000
books array
tags array
image nullable image_extension mimes:jpeg,png,gif,webp,avif max:50000
Example Request
{
"name": "My updated shelf",
"description_html": "
This is my updated shelf with some books
","books": [5,1,3]
}
Example Response
{
"id": 20,
"name": "My updated shelf",
"slug": "my-updated-shelf",
"description": "This is my updated shelf with some books",
"created_by": 1,
"updated_by": 1,
"created_at": "2023-12-22T14:33:52.000000Z",
"updated_at": "2023-12-22T14:35:00.000000Z",
"owned_by": 1,
"description_html": "
This is my updated shelf</em> with some books</p>",
"tags": [
{
"name": "Category",
"value": "Learning",
"order": 0
}
],
"cover": null
}
Is it a bug? Or somebody knows how to slove it.
If have successful cod , It is better
Use-Case
this is a example
import requests
import base64
正确配置(端口80,认证格式符合BookStack官方要求)
SHELF_ID = 34
COVER_PATH = "/mnt/d/finance-knowledge/cover.jpg"
API_ID = "KEJLTXMUokeefy709ELFEEEAkT3rc"
API_SECRET = "s9brmh86jWWW5liXP5rh2DR"
URL = f"http://192.168.0.101/api/shelves/{SHELF_ID}"
auth_str = f"{API_ID}:{API_SECRET}".strip()
auth_base64 = base64.b64encode(auth_str.encode("utf-8")).decode("utf-8")
headers = {
"Authorization": f"Basic {auth_base64}"
}
try:
with open(COVER_PATH, "rb") as f:
files = {
"image": ("cover.jpg", f, "image/jpeg"),
"name": (None, "en_shelf")
}
# 发送PUT请求(BookStack更新书架的标准方法)
response = requests.put(
url=URL,
headers=headers,
files=files,
timeout=30,
verify=False
)
except FileNotFoundError:
print(f"错误:封面文件不存在 → {COVER_PATH}")
except Exception as e:
print(f"请求错误:{str(e)}")
Additional context
No response
@ssddanbrown commented on GitHub (Nov 11, 2025):
Hi @shmbatom,
Due to a limitation in how PHP currently handles form data, you'd need to send the request as a
POSTrequest, then include a_methodparameter in the data set toPUTto indicate that this is a PUT request.This is mentioned in the request format part of the API docs.
I appreciate that this is strange/awkward, and hopefully something we'll be able to change in future PHP versions.
So, just to confirm, the latter part of your code may look something like:
@shmbatom commented on GitHub (Nov 17, 2025):
Thanks for your answer , and I'm very happy to see your reply.
I solves this matter by sql before I got your code ,and finally I successed.
My py code like as below: @ssddanbrown
Details
@ssddanbrown commented on GitHub (Nov 17, 2025):
Okay, glad you found a solution.
I'll therefore close this off.
Just a warning, those database commands will break on the latest versions of BookStack, and manual changes to the database are not advised for common/regular actions.