Laravel $request - >file () возвращает значение null
возникли проблемы при попытке загрузить файлы с помощью Laravel на задней панели.
вопрос
что Laravel $request->file()
метод возвращает значение null.
настройка
Я создаю запрос AJAX, используя суперагент, отладил запрос, и все кажется прекрасным. The Content-Length
изменения в зависимости от изображения, которое я добавляю, указывая, что изображение было добавлено в запрос. The Content-Type
также multipart/form-data
.
// request headers
Content-Length:978599
Content-Type:multipart/form-data;
// request payload
Content-Disposition: form-data; name="files"; filename="item-keymoment.png"
Content-Type: image/png
но я не удалось получить файл в Laravel. Используя $request->file('files')
возвращает NULL
, но если я отлажу $_FILES
массив, я заметил, что мой файл был загружен.
dd($request->file('files'))
// NULL
dd($_FILES);
// array:1 [
// "files" => array:5 [
// "name" => "item-keymoment.png"
// "type" => "image/png"
// "tmp_name" => "/tmp/phpipbeeM"
// "error" => 0
// "size" => 978274
// ]
// ]
dd($request->files->all())
// []
что может заставить Laravel игнорировать файл?Content-Type
входного файла не application/octet-stream
?
ниже ответили на вопрос.
2 ответов
вы должны добавить в тег формы 'enctype=" multipart / form-data'
например:
<form method="POST" action="{{route('back.post.new')}}" enctype="multipart/form-data">
......
</form>
добавление вы можете использовать свой пользовательский запрос.
Я надеюсь, это может вам помочь!
заметил, что $request
объект, который я получал в методе контроллера, был экземпляром JsonRequest
, который является пользовательским классом (пуст), что расширяет Illuminate\Http\Request
.
и он реализован как:
<?php
namespace App\Http\Requests;
use Illuminate\Http\Request;
class JsonRequest extends Request {
}
но если я изменю:
// from
use App\Http\Requests\JsonRequest;
public function add_background_image (JsonRequest $request) {
dd($request->file('files'))
// NULL
}
// to
use Illuminate\Http\Request;
public function add_background_image (Request $request) {
dd($request->file('files'))
// UploadedFile {#266
// -test: false
// -originalName: "item-keymoment.png"
// -mimeType: "image/png"
// -size: 978274
// -error: 0
// ...
// }
}
Я получаю желаемый входной файл. На данный момент переключение экземпляра $request
решает мой вопрос
но я не понимаю, почему/как расширение
Illuminate\Http\Request
пустой класс ломает вещи.
может кто-нибудь объяснить?
мое намерение с подклассами Illuminate\Http\Request
было присоединить методы $requests
для работы с исключениями/ошибками унифицированным способом для запросов API. Например, когда в развертывании отображаются сообщения об исключениях, но в производстве возвращается фиксированное сообщение.
есть ли другой/лучший / более Laravel способ сделать это?
Я думаю, просто создам JsonController вместо расширения Запрос.