fastAPI와 PHP 연동

octofox·2021년 9월 15일
0

form 태그와 같이 curl 로 post 요청 보내기를 시도했다.

<form action="/predict/skin/oil" enctype="multipart/form-data" method="post">
<input name="files" type="file" multiple>
<input type="submit">
</form>

<h6>same name</h6>
<form action="/predict/skin/oil" enctype="multipart/form-data" method="post">
<input name="files" type="file" >
<input name="files" type="file" >
<input type="submit">
</form>

같은 name으로 이러한 요청을 보내면 어떻게 오는지 몰랐다.

name="files[]" 이런 식으로의 전송은 알았지만 위에 것은 어떤 식으로 넘어오지?

stackoverflow에서도 다들 같은 키로 여러 파일을 전송하려 하는 외국인들이 많았다.

7개월 전 답변이 있었는데 시덥지 않은 답변이었다. 그 후로는 아무도 답해주지 않음.
그래서 내가 직접 다시 물어보기로 했다. 영어 문법은 잘 모르지만 알아 듣겠지...

스택오버플로우 나의 질문

   $data = array('files[0]'=>curl_file_create("../broken_item_img/210914_5415d0_3.jpg",'image/jpg', basename("210914_5415d0_3.jpg")),
              'files[1]'=>curl_file_create("../broken_item_img/210914_5415d0_3.jpg",'image/jpg', basename("210914_5415d0_3.jpg")),
              'files[2]'=>curl_file_create("../broken_item_img/210914_5415d0_3.jpg",'image/jpg', basename("210914_5415d0_3.jpg")));

$url="http://serv3.ifkn.net:8000/predict/skin/oil";
$headers = array("Content-Type:multipart/form-data");
$curl = curl_init();
curl_setopt_array(
	$curl, array(
		CURLOPT_URL => $url,
		CURLOPT_HEADER => true,
		CURLOPT_HTTPHEADER => $headers,
		CURLOPT_POST=> true,
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_RETURNTRANSFER => true,
	)
);

file[0] 처럼 인덱스를 준 배열로 설정하면 파이썬 서버에서 알아 먹지 못한는 엔티티라고 에러를 뿜는다.

그냥 files, 같은 키로 여러 파일을 전송하면 마지막 하나의 키만 남고 하나의 파일만 전송된다.

후... 이게 연관배열에서는 키 중복이 불가하다고 한다.
그래서 files => [이미지1, 이미지2, 이미지3]
이렇게도 해보았지만!!! UploadedFile 엔티티가 아니라고 불평한다... 배열이라서 파일이 아니라고 생각 하나보다.

$data = array('files'=>curl_file_create("../broken_item_img/210914_5415d0_3.jpg",'image/jpg', basename("210914_5415d0_3.jpg")));

php의 연관 배열은 중복키를 허용한다.
내부적으로 키는 같지만 유니크한 인덱스가 만들어져서 서로 구분 가능하게 한다.

스택오버플로우의 종결 답안

이미 해당 버그는 php 공식 사이트에서 다루어지고 있었다. 2010년부터...
아직도 해결이 안되었다니... 정말 어이가 없다.
guzzle이라는 라이브러리를 통해 curl클라이언트를 대신하여 사용할 수 있다.
이 라이브러리는 네임 중복이 가능하다.

profile
개발자라고 우기는 노답 소년

0개의 댓글