Lumen не получает никаких файлов из отправленных данных формы - PullRequest
0 голосов
/ 16 января 2020

Я зарегистрировал chrome Заголовки отправляют данные формы, которые выглядят примерно так:

Chrome Headers Form Data

Теперь, чтобы быть, похоже, что есть файл изображения с именем «files» в моем запросе POST.

Теперь в моем контроллере в Lumen я выполняю следующую отладку, чтобы попытаться получить файл:

return response([$request->hasFile('files'), $request->file('files'), $request->get('files')]);

Однако, что я получаю, это в ответе:

[true, {}, null]

Это мой запрос в приложении реакции:

const formData  = new FormData();
formData.append("files", this.state.productData[key][0]);

        fetch(`${process.env.REACT_APP_API_URL}/products/submit`, {
            method: 'POST',
            body: formData,
        })

Кто-нибудь знает, что не так с тем, что я делаю, чтобы получить изображение?

1 Ответ

1 голос
/ 17 января 2020

Метод $request->file() возвращает экземпляр класса Illuminate\Http\UploadedFile и отображается в вашем ответе как {}, но ваш файл загружен и действителен, когда $request->hasFile() равен true, поэтому вы можете получить его свойства, подобные этому:

if ($request->hasFile('files')) {
    $files = $request->file('files');

    return response()->json([
        'path' => $files->path(),
        'name' => $files->getClientOriginalName(),
        'size' => $files->getSize()
    ]);
}

Или, если вы хотите получить ответ в виде файла:

if ($request->hasFile('files')) {
    return response()->file(
        $request->file('files')->path()
    );
}

См. Laravel документы для извлечения и хранения загруженных файлов .

Примечание: я рекомендую использовать имя, отличное от files, поскольку $request->files является экземпляром класса Symfony\Component\HttpFoundation\FileBag и вызывает конфликт, когда вы хотите использовать $request->files в качестве сокращения $request->file('files').

...