REST API 사용 시 content-type이라는 property가 존재한다.
말 그대로 데이터와 형식과 관련된 부분이다.
일반적으로는 application/json 타입을 사용하여 json의 형태로 데이터를 주고 받지만, API에 따라 다양한 타입이 요구된다.

위는 N-cloud의 Clova Speech Recognition REST API에서 요구되는 헤더이고, 음성 파일을 텍스트로 번역해주는 API로 파일을 전송한다. 이같이 content-type이 octet-stream인 경우 Flutter에서 request하는 코드는 다음과 같다.
import 'package:dio/dio.dart';
import 'dart:io';
void requestSTT(String fileURL) async {
Response request = await new Dio().post(_uri + '?lang=Kor',
options: Options(headers: {
'Content-Type': 'application/octet-stream',
'X-NCP-APIGW-API-KEY-ID': _clientID,
'X-NCP-APIGW-API-KEY': _clientSecret,
}),
data: File(fileURL).openRead());
print(request.data['text']);
}
File().openRead()이 octet-stream에 해당하는 content-type이다.
어디에도 예제 코드도 해결방법도 없어 상당히 힘들었는데, N-cloud에서 제공한 JS와 python 예제에서 open()과 같은 함수를 사용하고 있어 운좋게 성공했다..
Flutter는 이슈가 발생하면 해결법을 찾기 정말 힘들다.
추가로 위의 코드에서는 http가 아닌 dio 패키지를 사용했는데, dio가 파일 업/다운로드시 체감 속도가 훨씬 빠르다고 느끼는 분들이 꽤 많았다.
'Flutter > Flutter Tech' 카테고리의 다른 글
[플러터] 가로 모드 회전 막기 (0) | 2021.12.01 |
---|---|
[플러터] Http로 Json 파싱하기 (0) | 2021.06.17 |
[플러터] 프로젝트 내 Json 파일 읽기 (0) | 2021.04.15 |
[플러터] Status bar 색상 변경하기 (1) | 2021.03.03 |
[플러터] Device 설정 무시 글자 크기 고정하기 (0) | 2021.02.28 |