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

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.

--

--

--

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

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Setup Multiple Nginx Ingress Controllers on EKS Clusters

Each and every request make sense…

How to Start with Medicine Delivery App Development [Ultimate Guide for 2020]

Simplify C# with Expression-Bodied Members

Meet the all new ELEMENTS DaVinci Resolve Panel

Some Agile INVESTment Advice

Automate Test Scenario Life Cycle

Confessions of a Stripe-aholic

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Jian Jye

Jian Jye

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

More from Medium

How to create a model in Laravel

Laravel create an admin panel from scratch — Part 1— Installation

Configuring Laravel 7 For Use With PhpRedis using Homestead