Флаттер и Laravel API. Файл загружен. Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST - PullRequest
0 голосов
/ 10 января 2020

Я хочу загрузить изображение из Flutter. Но я получаю эту ошибку:

Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST.

Но я установил свой маршрут API как POST метод. И я также отправляю POST запрос метода, но все равно получаю эту ошибку.

Но еще одна вещь, это работает на POSTMAN и INSOMNIA. Нет проблем.

enter image description here

Я использую это header:

Content-Type: multipart/form-data
Authorization: ....

Пожалуйста, помогите мне.

Мой маршрут:

Route::post('/avatar/update', 'Api\ProfileController@avatar_update')->name('api.avatar.update');

Мой контроллер:

public function avatar_update(Request $request){
        $request->validate(array(
            'avatar' => 'required|image',
        ));
        try{
            $image = Image::make($request->avatar)->fit(250, 250);
            $photo_name = Auth::user()->username."-".strtotime(now()).'.'.$request->avatar->extension();
            $path='images/avatars/'.$photo_name;
            $image->save($path);

            if(File::exists(Auth::user()->avatar)) {
                File::delete(Auth::user()->avatar);
            }

            Auth::user()->update([
                'avatar' => 'http://attendance.isadma.com/'.$path,
            ]);
            return response()->json([
                'status' => 1,
                'message' => 'Picture updated.',
                'image' => Auth::user()->avatar
            ], 200);
        }
        catch (\Exception $e){
            return response()->json([
                'status' => 0,
                'message' => $e->getMessage()
            ], 500);
        }
    }

Код запроса флаттера:

@override
  Future<String> uploadProfilePic(File profilePic, String token) async {
    var postUri = Uri.parse("$url/avatar/update");
    print(profilePic.path);
    print(postUri);
    var request = http.MultipartRequest("POST", postUri);
    request.headers['authorization'] = "Bearer $token";
    request.headers['Content-Type'] = "multipart/form-data";

    request.files.add(
      await http.MultipartFile.fromPath(
        'avatar',
        profilePic.path,
        contentType: MediaType('image', 'jpg'),
        filename: basename(profilePic.path),
      ),
    );

    print(request.headers);

    request.send().then((res) async {
      print(res.headers);
      print(res.statusCode);
      print(await res.stream.bytesToString());
    }).catchError((e) {
      print(e);
    });
  }

1 Ответ

0 голосов
/ 10 января 2020

убедитесь, что вы отправляете данные csrf (_token) в своем почтовом запросе

...