Flutter Laravel: загрузка изображения с помощью Dio и ImagePicker

#php #laravel #flutter #dart #dio

#php #laravel #flutter #dart #dio

Вопрос:

Я не могу загрузить изображение на свой сервер Laravel с Flutter с помощью Dio и ImagePicker, когда запрос в Postman возвращает успешный ответ

Почтальон:
postman_screenshot

Laravel:

 public function uploadFile(Request $request) {
        if($request->hasFile('image')) {
            $name = time()."_".$request->file('image')->getClientOriginalName();
            $request->file('image')->move(public_path('images'), $name);
        }
        return response()->json([
            asset("images/$name"),
            201,
            'message' => asset("images/$name") ? 'Image saved' : 'Image failed to save'
        ]);
    }
  

Flutter:

 Future getImage(context) async {
    var image = await picker.getImage(
        source: ImageSource.gallery,
        imageQuality: 50,
        maxHeight: 500.0,
        maxWidth: 500.0);
    imageFile = File(image.path);
    _uploadFile(imageFile);
  }

  _uploadFile(File file) async {
    String name = file.path.split('/').last;
    var data = FormData.fromMap({
      "name": await MultipartFile.fromFile(
        file.path,
        filename: name,
      ),
    });

    Dio dio = new Dio();
    await dio
        .post("http://localhost:8000/api/upload-file", data: data)
        .then((response) => print(response))
        .catchError((error) => print(error));
  }
  

Ошибка на стороне сервера: Http status error [500] Undefined variable *name* in file ...

Ответ №1:

Не могли бы вы повторить попытку после изменения приведенного ниже кода?

  var data = FormData.fromMap({
      "image": await MultipartFile.fromFile(
        file.path,
        filename: name,
      ),
    });
  

Комментарии:

1. Спасибо @kuku, я понял это после. Использовалось имя вместо изображения

Ответ №2:

Пожалуйста, попробуйте это, у меня это работает:

 List<MultipartFile> multiFiles = [];
for(int i = 0; i < files.length; i  ) {
multiFiles.add(await MultipartFile.fromPath('profile_photo[]', files[i].path));
}
request.files.addAll(multiFiles);