Reputation: 1743
FileSystem :
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
'shares' => [
'driver' => 'local',
'root' => public_path('shares'),
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_KEY'),
'secret' => env('AWS_SECRET'),
'region' => env('AWS_REGION'),
'bucket' => env('AWS_BUCKET'),
],
],
My controller :
public function store(Request $request) {
$rules = [
'user_id' => 'required|exists:users,id',
'patient_case_id' => 'required|exists:patient_cases,id',
'shared_with' => 'required|exists:users,id',
];
$this->validate($request, $rules);
$data = $request->all();
$data['shared_file'] = $request->file('file')->store('shares/'.$data["user_id"], $data["shared_file"]->getClientOriginalName());
$newShare = WayneRooney::create($data);
return $this->showOne($newShare, 201);
}
if i leave store method empty, it works and writes file in shares folder in public path with a unique id. But i want to write file with original name under the shares/{USER_ID} folder.
how can i do this ?
Upvotes: 0
Views: 4013
Reputation: 5041
If you would not like a file name to be automatically assigned to your stored file, you may use the storeAs
method, which receives the path, the file name, and the (optional) disk as its arguments:
$path = $request->file('avatar')->storeAs(
'avatars', $request->user()->id
);
you may also use the putFileAs
method on the Storage facade, which will perform the same file manipulation as the example above:
$path = Storage::putFileAs(
'avatars', $request->file('avatar'), $request->user()->id
);
Hope this fixed your issue!
Upvotes: 3