Я пытаюсь загрузить файл из локального хранилища, но продолжаю получать сообщение об ошибке: Невозможно получить размер файла для файла в указанном месте.
if (file_exists($filePath)) {
return Storage::download($filePath, $fileName);
}
Путь к файлу проверяется перед тем, как убедиться, что файл существует.
Ошибка возникает из строки vendor/league/flysystem-local/LocalFilesystemAdapter.php 418.
public function fileSize(string $path): FileAttributes
{
$location = $this->prefixer->prefixPath($path);
error_clear_last();
if (is_file($location) && ($fileSize = @filesize($location)) !== false) {
return new FileAttributes($path, $fileSize);
}
throw UnableToRetrieveMetadata::fileSize($path, error_get_last()['message'] ?? '');
}
Я установил точку останова на линии
$location = $this->prefixer->prefixPath($path);
и обнаружил, что $location задается какой-то странной конкатенацией пути к папке и полного пути к файлу.
C:\Users\tomva\Projects\laravel\storage\app\C:/Users/tomva/Projects/laravel/storage/app/pph/482678575-0150974001684180496/1283_CO1SAL_202301_O.pdf
Я подумал, может быть, это как-то связано с разработкой для Windows, поэтому я загрузил на наш веб-сервер, который является Linux, но получил ту же ошибку.
Я тестировал, просто получая размер файла, и он выдает ту же ошибку.
$size = Storage::size($filePath);
Но использование is_file($filePath) и filesize($filePath) работает нормально;
Просто чтобы убедиться, что файл может быть загружен, я попытался использовать код из другого приложения, которое я использовал для загрузки файлов, и он работал нормально.
Кто-нибудь знает, что может вызвать это?






Проблема в том, что вы используете путь к файлу в качестве аргумента для storage::download().
В storage::download() уже есть путь к этому каталогу, вам просто нужно передать имя файла, который вы хотите загрузить, в качестве первого аргумента. Второй параметр — это имя файла, которое пользователи увидят при загрузке файла.
Вот пример: -
Storage::download($fileName, '$userShownFileName');
Где $fileName — исходное имя файла, а $userShownFileName — имя файла для пользователей при загрузке. Вы можете прочитать больше в документации laravel.