본문 바로가기
Flutter/Flutter FAQ

Flutter에서 이미지와 파일을 서버에 업로드하는 방법은 무엇인가요?, How to upload images and file to a server in Flutter?

by 베타코드 2023. 6. 24.
반응형

질문


이미지 처리를 위해 웹 서비스를 사용합니다. Postman에서 잘 작동합니다:

postman screenshot

이제 Dart에서 flutter를 사용하여 http 요청을 만들고 싶습니다:

import 'package:http/http.dart' as http;

static ocr(File image) async {
    var url = '${API_URL}ocr';
    var bytes = image.readAsBytesSync();

    var response = await http.post(
        url,
        headers:{ "Content-Type":"multipart/form-data" } ,
        body: { "lang":"fas" , "image":bytes},
        encoding: Encoding.getByName("utf-8")
    );

    return response.body;

  }

그러나 이미지 파일을 업로드하는 방법을 모르겠습니다. 위의 코드에서 예외가 발생합니다: Bad state: Cannot set the body fields of a Request with content-type "multipart/form-data".
요청의 본문을 어떻게 작성해야 할까요?


답변


귀하의 해결책은 작동할 것입니다. 많은 서버는 application/x-www-form-urlencoded를 대체로 허용합니다. (데이터가 중간적으로 비효율적으로 인코딩됩니다).

하지만, 이를 수행하기 위해 dart:http를 사용할 수 있습니다. http.post 대신 http.MultipartFile 객체를 사용해야 합니다.

dart 문서에서:

var request = new http.MultipartRequest("POST", url);
request.fields['user'] = 'someone@somewhere.com';
request.files.add(http.MultipartFile.fromPath(
    'package',
    'build/package.tar.gz',
    contentType: new MediaType('application', 'x-tar'),
));
request.send().then((response) {
  if (response.statusCode == 200) print("Uploaded!");
});
반응형

댓글