이슈 및 해결방법
서버에 데이터를 POST 할 때, JSON 및 File(PDF) 데이터를 함께 전송해야 하는 상황에서 계속 415 에러가 발생했다.
application/json 타입이 아니라 application/octet-stream 타입으로 전송되었기 때문에 발생한 이슈로 추측된다.
내가 해결한 방법은 다음처럼 각 데이터, 특히 JSON으로 보낼 데이터의 contentType을 명시해주는 것이다.
var data = FormData.fromMap(
{
"file": await MultipartFile.fromFile(
result.files.single.path!,
contentType: MediaType("application", "pdf"),
),
"fileData": MultipartFile.fromString(
jsonEncode({"testId": 1, "fileId": 0}),
contentType: MediaType("application", "json"),
)
},
);
데이터를 POST하는 전체 코드 예시는 다음과 같다.
*참고로 MediaType 클래스를 사용하려면 http_parser 패키지를 import 해야 한다.
postFile() async {
const url = "";
Dio dio = Dio();
FilePickerResult? result = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowMultiple: false,
allowedExtensions: ['pdf'],
);
if (result != null && result.files.single.path != null) {
var data = FormData.fromMap(
{
"file": await MultipartFile.fromFile(
result.files.single.path!,
contentType: MediaType("application", "pdf"),
),
"fileData": MultipartFile.fromString(
jsonEncode({"testId": 1, "fileId": 0}),
contentType: MediaType("application", "json"),
)
},
);
try {
final res = await dio.post(url, data: data);
getFileList();
print("res: ${res.statusCode}");
} catch (e) {
print("error: $e");
}
}
}
}
'Flutter' 카테고리의 다른 글
Flutter :: Github Action으로 Flutter Web Deploy하기 (0) | 2024.04.11 |
---|