• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

ios 이미지 전송 질문

24.02.11 14:15 작성 조회수 92

0

Future<void> uploadFile() async {
  // file picker를 통해 파일 선택

    final filePath = _image!.path;

    // 파일 경로를 통해 formData 생성
    var dio = Dio();
    var formData = FormData.fromMap({
      'file' : await MultipartFile.fromFile(filePath!)
    });
    dio.options.contentType = 'multipart/form-data';
    dio.options.maxRedirects.isFinite;
    final token = await ref.read(secureStorageProvider).read(key:ACCESS_TOKEN_KEY);
    dio.options.headers.addAll({
      'authorization': 'bearer $token',
    });
    print("ok");
    // 업로드 요청
    final response = await dio.post("http://$ip/s3/upload", data: formData);
    _downloadUrl = response.data;
    print(response.statusCode.toString() + "hihi");

}

이미지 업로드 코드로 위 코드를 사용하고있는데 안드로이드 애뮬레이터에서는 전송이 잘 되지만 ios에서 해당 코드를 실행하면

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioError [DioErrorType.response]: Http status error [401]

계속 위와 같은 에러가 뜹니다 구글에 검색해도 잘 안나와서 질문드립니다.

답변 2

·

답변을 작성해보세요.

0

안녕하세요!

401 에러는 권한이 없는 경우입니다.

토큰을 출력해보시고 토큰이 존재하지 않는 상황이 아닌지 확인 해주세요!

감사합니다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.13

안녕하세요, 인프런 AI 인턴입니다.
dlckdals9467님의 iOS 이미지 업로드 관련 질문에 답변 드리겠습니다.

DioError [DioErrorType.response]: Http status error [401] 에러는 일반적으로 HTTP 요청이 서버에 의해 인증되지 않았음을 나타냅니다. 이러한 상태 코드는 토큰이 유효하지 않거나 만료되었을 때, 또는 요청 헤더가 올바르게 설정되지 않았을 때 발생할 수 있습니다.

iOS에서만 문제가 발생한다면, iOS 앱의 네트워크 / 보안 설정에 문제가 있을 수 있습니다. 예를 들어, ATS(App Transport Security) 설정 문제일 수 있는데, ATS는 iOS 9.0 이후 기본적으로 HTTP 연결을 차단하고 HTTPS 연결만 허용합니다. 만약 서버가 HTTP를 사용하고 있다면, 이를 ATS 설정에서 예외 처리하거나, 서버를 HTTPS로 업그레이드 해야 합니다.

iOS 앱 특유의 권한 요청이나 다른 설정으로 인해 발생할 수 있는 문제도 확인해 보십시오. 예를 들어, Info.plist 내에 필요한 권한 설명이 누락되었거나 네트워크 사용 설정이 잘못되었을 수 있습니다.

또한, 사용하고 계신 토큰(token)이 올바른지, 혹은 iOS에서 특별히 요구하는 추가적인 인증 헤더가 필요한지 확인해 보십시오.

이러한 요소를 체크하여 문제를 찾아 해결하시기 바랍니다. 필요하다면 iOS 네트워크 관련 문서나 Community Discussion 등을 참고하시는 것도 도움이 될 것입니다.

도움이 필요하시면 추가 질문을 통해 문의해 주세요.