Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

tcetin's avatar

ErrorException stream_copy_to_stream(): read of 8192 bytes failed with errno=21 Is a directory

I am getting this error on ubuntu & nginx web server while file uploading.

ErrorException stream_copy_to_stream(): read of 8192 bytes failed with errno=21 Is a directory

My environment is:

  • php7.4
  • laravel 7.x

It happens at Illuminate\Foundation\Bootstrap\HandleExceptions::handleError vendor/league/flysystem/src/Adapter/Local.php:159

What is this error? How can I solve?

0 likes
12 replies
bobbybouwmann's avatar

It seems that this has something to do with parsing files. So I have a few questions to determine what can be wrong here:

  • Did you update the application from an older version?
  • Do you have the full stack trace of this error? The error from this is probably thrown before that already
  • What logging driver do you use?
  • Did you change anything in your app/Exceptions/Handler.php class?
johncarter's avatar

I'm here with the same question, so I'll reply with my answers. This is actually a Statamic V3 site I am running.

  • Not sure when I last updated.
  • Here my stack trace from /storage/logs/laravel.log:
[2020-06-23 18:53:13] production.ERROR: stream_copy_to_stream(): read of 8192 bytes failed with errno=21 Is a directory {"userId":"c09ea867-24cf-4dee-854b-ad0a273d3c40","exception":"[object] (ErrorException(code: 0): stream_copy_to_stream(): read of 8192 bytes failed with errno=21 Is a directory at /home/forge/www.REDACTEDDOMAIN.com/vendor/league/flysystem/src/Adapter/Local.php:159)
[stacktrace]
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()
#1 /home/forge/www.REDACTEDDOMAIN.com/vendor/league/flysystem/src/Adapter/Local.php(159): stream_copy_to_stream()
#2 /home/forge/www.REDACTEDDOMAIN.com/vendor/league/flysystem/src/Filesystem.php(122): League\Flysystem\Adapter\Local->writeStream()
#3 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php(224): League\Flysystem\Filesystem->putStream()
#4 /home/forge/www.REDACTEDDOMAIN.com/vendor/statamic/cms/src/Filesystem/AbstractAdapter.php(28): Illuminate\Filesystem\FilesystemAdapter->put()
#5 /home/forge/www.REDACTEDDOMAIN.com/vendor/statamic/cms/src/Assets/Asset.php(562): Statamic\Filesystem\AbstractAdapter->put()
#6 /home/forge/www.REDACTEDDOMAIN.com/vendor/statamic/cms/src/Http/Controllers/CP/Assets/AssetsController.php(78): Statamic\Assets\Asset->upload()
#7 [internal function]: Statamic\Http\Controllers\CP\Assets\AssetsController->store()
#8 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array()
#9 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction()
#10 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\Routing\ControllerDispatcher->dispatch()
#11 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\Routing\Route->runController()
#12 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(681): Illuminate\Routing\Route->run()
#13 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#14 /home/forge/www.REDACTEDDOMAIN.com/vendor/statamic/cms/src/Http/Middleware/CP/Localize.php(16): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#15 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Statamic\Http\Middleware\CP\Localize->handle()
#16 /home/forge/www.REDACTEDDOMAIN.com/vendor/statamic/cms/src/Http/Middleware/CP/Authorize.php(25): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#17 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Statamic\Http\Middleware\CP\Authorize->handle()
#18 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#19 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Routing\Middleware\SubstituteBindings->handle()
#20 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(76): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#21 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle()
#22 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#23 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\View\Middleware\ShareErrorsFromSession->handle()
#24 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#25 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Session\Middleware\StartSession->handle()
#26 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#27 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle()
#28 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#29 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Cookie\Middleware\EncryptCookies->handle()
#30 /home/forge/www.REDACTEDDOMAIN.com/vendor/statamic/cms/src/Http/Middleware/SwapExceptionHandler.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#31 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Statamic\Http\Middleware\SwapExceptionHandler->handle()
#32 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#33 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(683): Illuminate\Pipeline\Pipeline->then()
#34 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\Routing\Router->runRouteWithinStack()
#35 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(624): Illuminate\Routing\Router->runRoute()
#36 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(613): Illuminate\Routing\Router->dispatchToRoute()
#37 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(170): Illuminate\Routing\Router->dispatch()
#38 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#39 /home/forge/www.REDACTEDDOMAIN.com/vendor/statamic/cms/src/Http/Middleware/PoweredByHeader.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#40 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Statamic\Http\Middleware\PoweredByHeader->handle()
#41 /home/forge/www.REDACTEDDOMAIN.com/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(58): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#42 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Barryvdh\Debugbar\Middleware\InjectDebugbar->handle()
#43 /home/forge/www.REDACTEDDOMAIN.com/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#44 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Fideloper\Proxy\TrustProxies->handle()
#45 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#46 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#47 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#48 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#49 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#50 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#51 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(63): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#52 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle()
#53 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#54 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(145): Illuminate\Pipeline\Pipeline->then()
#55 /home/forge/www.REDACTEDDOMAIN.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#56 /home/forge/www.REDACTEDDOMAIN.com/public/index.php(55): Illuminate\Foundation\Http\Kernel->handle()
#57 {main}
"} 
  • Is set to stack, but not used.
  • Not changed anything in that class.
johncarter's avatar

I have tried uploading the file locally ( Windows 10 / PHP 7.4 / Nginx ) and it works.

Therefore it's relevant that the server this is happening on is a Laravel Forge provisioned DO droplet.

I also tried using a new random test image from unsplash and it works on the production server. So there is something about this jpg on this server.

Also, I'd suggest this is better placed in Servers discussion.

yiddishekop's avatar

I'm having the same issue: locally uploads work fine, but on the server I get the above error:

production.ERROR: stream_copy_to_stream(): read of 8192 bytes failed with errno=21 Is a directory {"userId":28,"exception":"[object] (ErrorException(code: 0): stream_copy_to_stream(): read of 8192 bytes failed with errno=21 Is a directory at /var/www/jkaraoke-app/vendor/league/flysystem/src/Adapter/Local.php:159)

I updated my PHP ini to allow bigger uploads already.

sierra's avatar

I'm having the same issue: locally uploads work fine, but on the server I get the above error: [2]

yudo's avatar

This is related with PHP settings. Error is not clear on this case.

Increase these variables on your PHP.ini file:

upload_max_filesize post_max_size memory_limit

Maybe on your case, you do not need increase all of them.. depends on your filesize, but because they are related, I am showing here for someone that have this issue. At least review the value of these variables.

3 likes
protendai's avatar

I increased the upload_max_filesize and it solved the problem for me

1 like
Reiniger's avatar

Just max_upload_limit and Max_post_size need set up with bigger mb

ChristianPav's avatar

I had the same error. Make sure you're targeting a file and not a directory. example: /uploads/1/ gives an error. /uploads/1/foo.jpg should work.

denesviktor's avatar

check your php.ini in php cli directory too, if you use php artisan serve.

Please or to participate in this conversation.