Upload of images isn't working #5183

Closed
opened 2026-02-05 09:46:34 +03:00 by OVERLORD · 5 comments
Owner

Originally created by @TineUser on GitHub (Feb 14, 2025).

Describe the Bug

When uploading image to pages or the logo for customizing BookStack, I get one of these error messages:

Image

Image

Image

The lavarel log contains always the following lines after trying to upload an image:

[2025-02-14 16:35:36] testing.ERROR: Path must not be empty {"userId":8,"exception":"[object] (ValueError(code: 0): Path must not be empty at C:\\inetpub\\wwwroot\\bookstacktest\\app\\Uploads\\ImageService.php:40) [stacktrace] #0 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Uploads\\ImageService.php(40): file_get_contents() #1 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Uploads\\ImageRepo.php(114): BookStack\\Uploads\\ImageService->saveNewFromUpload() #2 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Settings\\AppSettingsStore.php(65): BookStack\\Uploads\\ImageRepo->saveNew() #3 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Settings\\AppSettingsStore.php(21): BookStack\\Settings\\AppSettingsStore->updateAppLogo() #4 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Settings\\SettingController.php(52): BookStack\\Settings\\AppSettingsStore->storeFromUpdateRequest() #5 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Controller.php(54): BookStack\\Settings\\SettingController->update() #6 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #7 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #8 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(205): Illuminate\\Routing\\Route->runController() #9 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(806): Illuminate\\Routing\\Route->run() #10 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(144): Illuminate\\Routing\\Router->{closure:Illuminate\\Routing\\Router::runRouteWithinStack():805}() #11 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\Authenticate.php(23): Illuminate\\Pipeline\\Pipeline->{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():142}() #12 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\Authenticate->handle() #13 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\Localization.php(32): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #14 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\Localization->handle() #15 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\RunThemeActions.php(26): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #16 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\RunThemeActions->handle() #17 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #18 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #19 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #20 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle() #21 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\View\\Middleware\\ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #22 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle() #23 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php(121): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #24 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest() #25 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Session\\Middleware\\StartSession->handle() #26 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #27 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle() #28 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #29 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #30 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\ApplyCspRules.php(33): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #31 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\ApplyCspRules->handle() #32 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #33 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #34 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #35 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(748): Illuminate\\Routing\\Router->runRoute() #36 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #37 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #38 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}() #39 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():142}() #40 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #41 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Http\\Middleware\\TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #42 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #43 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #44 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #45 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #46 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #47 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #48 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #49 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #50 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #51 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #52 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #53 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #54 C:\\inetpub\\wwwroot\\bookstacktest\\public\\index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #55 {main} "}

BookStack is using PHP 8.4.3 but with 8.3.16 it's also not working. BookStack runs on IIS 10 on Windows Server 2022.

The folder write permissions to the IIS_USRS group are set as described here: https://www.bookstackapp.com/docs/admin/filesystem-permissions/.

An older BookStack instance on a Windows 10 machine with XAMPP doesn't have this issue.

I tried also what's described here: https://github.com/BookStackApp/BookStack/issues/2300. But this doesn't work. I tried different temp folders and gave the IIS_USRS group write permissions but it didn't help.

Steps to Reproduce

Uploading images per copy & paste, as file or the logo in the customization settings of BookStack.

Expected Behaviour

The pictures are uploaded.

Screenshots or Additional Context

No response

Browser Details

No response

Exact BookStack Version

BookStack v24.12.1

Originally created by @TineUser on GitHub (Feb 14, 2025). ### Describe the Bug When uploading image to pages or the logo for customizing BookStack, I get one of these error messages: ![Image](https://github.com/user-attachments/assets/e7940973-ec79-4840-9997-2f05997dad36) ![Image](https://github.com/user-attachments/assets/b022bbb8-7a3f-4c61-b57d-ab18ded29ee2) ![Image](https://github.com/user-attachments/assets/7bd7cd10-6a5e-43fb-b5de-e861cbd6bda2) The lavarel log contains always the following lines after trying to upload an image: ` [2025-02-14 16:35:36] testing.ERROR: Path must not be empty {"userId":8,"exception":"[object] (ValueError(code: 0): Path must not be empty at C:\\inetpub\\wwwroot\\bookstacktest\\app\\Uploads\\ImageService.php:40) [stacktrace] #0 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Uploads\\ImageService.php(40): file_get_contents() #1 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Uploads\\ImageRepo.php(114): BookStack\\Uploads\\ImageService->saveNewFromUpload() #2 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Settings\\AppSettingsStore.php(65): BookStack\\Uploads\\ImageRepo->saveNew() #3 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Settings\\AppSettingsStore.php(21): BookStack\\Settings\\AppSettingsStore->updateAppLogo() #4 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Settings\\SettingController.php(52): BookStack\\Settings\\AppSettingsStore->storeFromUpdateRequest() #5 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Controller.php(54): BookStack\\Settings\\SettingController->update() #6 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #7 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #8 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(205): Illuminate\\Routing\\Route->runController() #9 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(806): Illuminate\\Routing\\Route->run() #10 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(144): Illuminate\\Routing\\Router->{closure:Illuminate\\Routing\\Router::runRouteWithinStack():805}() #11 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\Authenticate.php(23): Illuminate\\Pipeline\\Pipeline->{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():142}() #12 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\Authenticate->handle() #13 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\Localization.php(32): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #14 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\Localization->handle() #15 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\RunThemeActions.php(26): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #16 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\RunThemeActions->handle() #17 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #18 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #19 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #20 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle() #21 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\View\\Middleware\\ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #22 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle() #23 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php(121): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #24 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest() #25 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Session\\Middleware\\StartSession->handle() #26 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #27 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle() #28 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #29 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #30 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\ApplyCspRules.php(33): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #31 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\ApplyCspRules->handle() #32 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #33 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #34 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #35 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(748): Illuminate\\Routing\\Router->runRoute() #36 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #37 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #38 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}() #39 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():142}() #40 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #41 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Http\\Middleware\\TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #42 C:\\inetpub\\wwwroot\\bookstacktest\\app\\Http\\Middleware\\TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #43 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #44 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #45 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #46 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #47 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #48 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #49 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #50 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #51 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():158}:159}() #52 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #53 C:\\inetpub\\wwwroot\\bookstacktest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #54 C:\\inetpub\\wwwroot\\bookstacktest\\public\\index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #55 {main} "} ` BookStack is using PHP 8.4.3 but with 8.3.16 it's also not working. BookStack runs on IIS 10 on Windows Server 2022. The folder write permissions to the IIS_USRS group are set as described here: https://www.bookstackapp.com/docs/admin/filesystem-permissions/. An older BookStack instance on a Windows 10 machine with XAMPP doesn't have this issue. I tried also what's described here: https://github.com/BookStackApp/BookStack/issues/2300. But this doesn't work. I tried different temp folders and gave the IIS_USRS group write permissions but it didn't help. ### Steps to Reproduce Uploading images per copy & paste, as file or the logo in the customization settings of BookStack. ### Expected Behaviour The pictures are uploaded. ### Screenshots or Additional Context _No response_ ### Browser Details _No response_ ### Exact BookStack Version BookStack v24.12.1
OVERLORD added the 🐕 Support label 2026-02-05 09:46:34 +03:00
Author
Owner

@ssddanbrown commented on GitHub (Feb 14, 2025):

Hi @TineUser,

This indicates that BookStack is having trouble gaining access to the actual file upload, or that upload does not exist as expected.

I feel that the answer here is probably very much relevant: https://stackoverflow.com/a/45587676/5513397

@ssddanbrown commented on GitHub (Feb 14, 2025): Hi @TineUser, This indicates that BookStack is having trouble gaining access to the actual file upload, or that upload does not exist as expected. I feel that the answer here is probably very much relevant: https://stackoverflow.com/a/45587676/5513397
Author
Owner

@TineUser commented on GitHub (Feb 15, 2025):

Hi @ssddanbrown,

thank you for your support. As already written I tried with the upload temp folder and the permissions. On a Windows Server 2022 there's no special user available for IIS. IIS is running in the context of LOCAL SYSTEM.

So I tried once more with a new folder on the C: root, i. e. C:\Upload_TEMP. I set write permissions for everyone. I configured this folder in php.ini, upload_tmp_dir = "C:\Upload_TEMP". Then I restarted IIS.

But even with this configuration the upload doesn't work.

@TineUser commented on GitHub (Feb 15, 2025): Hi @ssddanbrown, thank you for your support. As already written I tried with the upload temp folder and the permissions. On a Windows Server 2022 there's no special user available for IIS. IIS is running in the context of LOCAL SYSTEM. So I tried once more with a new folder on the C: root, i. e. C:\Upload_TEMP. I set write permissions for everyone. I configured this folder in php.ini, `upload_tmp_dir = "C:\Upload_TEMP"`. Then I restarted IIS. But even with this configuration the upload doesn't work.
Author
Owner

@ssddanbrown commented on GitHub (Feb 15, 2025):

@TineUser Are you seeing any indication that the upload_tmp_dir change is taking affect?

If not, Create a public/test.php within your BookStack folder with <?php phpinfo(); as its contents, then visit the /test.php path in the browser to confirm, by searching for the upload_tmp_dir value there. Is that accurate?

@ssddanbrown commented on GitHub (Feb 15, 2025): @TineUser Are you seeing any indication that the `upload_tmp_dir` change is taking affect? If not, Create a `public/test.php` within your BookStack folder with `<?php phpinfo();` as its contents, then visit the `/test.php` path in the browser to confirm, by searching for the `upload_tmp_dir` value there. Is that accurate?
Author
Owner

@TineUser commented on GitHub (Feb 15, 2025):

@ssddanbrown No. As written earlier I tried this setting and it didn't work. But with the test.php I found out that the path didn't change although I set it in the php.ini. Then I saw that upload_tmp_dir was set twice in php.ini. So my setting was overwritten by a second setting. After deleteing this second setting in php.ini the upload is working fine. Thank you for your support.

So for all readers of this issue:

When running PHP based applications on Windows with upload function you have to create a separate upload temp folder. Do not use C:\Windows\Temp or a folder in C:\inetpub because you have to change the permissions of this folder and this could be a security risk. After creting this separate folder you have to give everyone write permissions to this folder because IIS is running in the context of LOCAL SYSTEM user. I hope this helps.

@TineUser commented on GitHub (Feb 15, 2025): @ssddanbrown No. As written earlier I tried this setting and it didn't work. But with the test.php I found out that the path didn't change although I set it in the php.ini. Then I saw that `upload_tmp_dir` was set twice in php.ini. So my setting was overwritten by a second setting. After deleteing this second setting in php.ini the upload is working fine. Thank you for your support. So for all readers of this issue: When running PHP based applications on Windows with upload function you have to create a separate upload temp folder. Do not use `C:\Windows\Temp` or a folder in `C:\inetpub` because you have to change the permissions of this folder and this could be a security risk. After creting this separate folder you have to give everyone write permissions to this folder because IIS is running in the context of LOCAL SYSTEM user. I hope this helps.
Author
Owner

@ssddanbrown commented on GitHub (Feb 15, 2025):

Good to hear you got things working! Will therefore close this off.

@ssddanbrown commented on GitHub (Feb 15, 2025): Good to hear you got things working! Will therefore close this off.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/BookStack#5183