How to fix undefined method File::hashName() in Laravel Storage putFile()

Jian Jye
2 min readJul 8, 2021
Photo by Sung Jin Cho on Unsplash

In an app that I’m currently working on, I need to copy some large files from local disk over to DigitalOcean Spaces everyday after processing. Because the files are quite large, I need to do it via streaming instead or I will exhaust my VPS’s memory.

Following Laravel’s documentation, I have some codes that look like this:

$path = \Storage::disk('local')->path('data.csv');$file = new \File($path);\Storage::disk('digitalocean')->putFile('archive', $file);

But I would get an error like this and I have no idea why!

Call to undefined method Illuminate\Support\Facades\File::hashName() at vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php:259

If I change to use putFileAs() instead, I would get this error instead:

Call to undefined method Illuminate\Support\Facades\File::getRealPath() at vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php:273

I’m pulling my hair at this point because WHY DOESN’T IT WORK! It makes no sense!

Turns out that I didn’t follow the documentation exactly.

How to fix it?

You see when I see the sample codes from documentation as such:

$path = Storage::putFile('photos', new File('/path/to/photo'));

I automatically assume that this File comes from Illuminate\Support\Facades\File , which can be conveniently accessed via \File directly.

Instead, this File actually comes from Illuminate\Http\File ! In fact it was clearly written above the line of codes I copied from in the documentation… My bad for missing it entirely.

So to get my codes working, all I have to do is import this class and update the \File part:

use Illuminate\Http\File;$path = \Storage::disk('local')->path('data.csv');$file = new File($path);\Storage::disk('digitalocean')->putFile('archive', $file);

Tada~ It finally works now.

--

--

Jian Jye

I write about Laravel, PHP, and web development related articles.