Я загружаю на свой сервер в Laravel массив из нескольких файлов.
Когда я регистрирую файлы с помощью $request->file('files'), я получаю:
[2018-11-12 16:10:03] local.DEBUG: array (
0 =>
Illuminate\Http\UploadedFile::__set_state(array(
'test' => false,
'originalName' => 'test-pdf.pdf',
'mimeType' => 'application/pdf',
'error' => 0,
'hashName' => NULL,
)),
1 =>
Illuminate\Http\UploadedFile::__set_state(array(
'test' => false,
'originalName' => 'test-pdf.pdf',
'mimeType' => 'application/pdf',
'error' => 0,
'hashName' => NULL,
)),
2 =>
Illuminate\Http\UploadedFile::__set_state(array(
'test' => false,
'originalName' => 'test-pdf.pdf',
'mimeType' => 'application/pdf',
'error' => 0,
'hashName' => NULL,
)),
)
Я хочу получить доступ к каждому файлу в массиве и получить такой путь к имени:
$files = $request->files;
foreach ($files as $key => $file) {
Log::debug($file->getPathName());
}
Однако это вызывает следующую ошибку:
local.ERROR: Call to a member function getPathName() on array {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Call to a member function getPathName() on array at /home/vagrant/Projects/business-risk-portal/app/Http/Controllers/FileController.php:68)
Как получить доступ к пути к каждому из этих загруженных файлов?
ОБНОВИТЬ Если я попробую это:
$files = $request->files;
foreach ($files as $key => $file) {
$temp_path = $request->file('tmp.' . $key);
Log::debug($temp_path->getPathName());
}
Я получил:
Call to a member function getPathName() on null {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Call to a member function getPathName() on null at /home/vagrant/Projects/business-risk-portal/app/Http/Controllers/FileController.php:69)
Введен ли ваш $request->files в запрос для обработки сообщений формы? Если да, то можно сделать print_r($request->files)? Возможно, он возвращает информацию, как $_FILES, то есть это массивы, а не объекты.
@ Девон, ты прав. Вы можете написать это как ответ, и я сделаю его принятым.






Вот что у меня сработало:
Сторона сервера:
$files = $request->file('myfiles');
foreach($files as $file) {
$target = $file->move(storage_path('files'), $file->getClientOriginalName());
$path = $target->getPath() . DIRECTORY_SEPARATOR . $target->getFileName();
}
Вид:
<form method = "post" action = "/myfiles" enctype = "multipart/form-data">
{{csrf_field()}}
<input type = "file" name = "myfiles[]" class = "form-control" multiple />
<button type = "submit" class = "btn btn-success">Save</button>
</form>
$request->files вернет многомерный массив всех файлов, а $request->file('files') вернет массив только файлов, относящихся к входу files.
Я предполагаю, что $ request-> files и $ request-> file ('files') возвращают разные значения ... Возможно, $ request-> files возвращает массив всех файлов по сравнению с файлами с входным именем
files.