<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreFilesRequest;
use App\Http\Requests\UpdateFilesRequest;
use App\Models\Files;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
class FilesController extends Controller
{
public function store(StoreFilesRequest $request)
{
$user = auth()->user(); // Получаем текущего пользователя
$allowedFileTypes = ['doc', 'pdf', 'docx', 'zip', 'jpeg', 'jpg', 'png'];
$allowedFileExtensions = array_map('strtolower', $allowedFileTypes);
$file = $request->file('file'); // Получаем файл из formData
if ($file && in_array(strtolower($file->getClientOriginalExtension()), $allowedFileExtensions)) {
if ($file->getSize() <= 2097152) { // 2 MB
$fileId = Str::random(10);
$originalName = $file->getClientOriginalName();
$fileName = $originalName;
$extension = $file->getClientOriginalExtension();
$i = 1;
while (Storage::disk('public')->exists("C:\Users\alecs\OneDrive\Рабочий стол\l/{$user->id}/{$fileName}.{$extension}")) {
$fileName = $originalName . " ($i)";
$i++;
}
$path = $file->storeAs("C:\Users\alecs\OneDrive\Рабочий стол\l/{$user->id}", "$fileName.$extension", 'public');
$fileModel = new Files; // Files модель файла
$fileModel->file_id = $fileId;
$fileModel->user_id = $user->id;
$fileModel->original_name = $originalName;
$fileModel->file_name = $fileName;
$fileModel->extension = $extension;
$fileModel->path = $path;
$fileModel->save();
return response()->json([
'success' => true,
'file_id' => $fileId,
'file_name' => $fileName,
'file_path' => Storage::disk('public')->url($path)
]);
} else {
return response()->json([
'success' => false,
'message' => 'Размер файла превышает допустимый предел.'
], 422);
}
} else {
return response()->json([
'success' => false,
'message' => 'Неверный тип файла. Допустимые типы: ' . implode(', ', $allowedFileTypes)
], 422);
}
}
}