Вызов функции-члена getPathName () для массива - PullRequest
0 голосов
/ 12 ноября 2018

Я загружаю многофайловый массив на мой сервер в 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)

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

$request->files вернет многомерный массив всех файлов, а $request->file('files') вернет массив только файлов, относящихся к вводу files.

0 голосов
/ 12 ноября 2018

Вот что у меня сработало:

На стороне сервера:

$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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...