필요에 의해 html -> php -> java api로 파일을 전송해야 할 일이 생겼다.

Java Api는 UI에서 바로 사용하면 안되는 상태라서 php를 거쳐 가야 하는데 html에서 올린 파일을 Java API로 전달 하는 과정이 생각보다 쉽지 않아 정리 차원에서 글을 남긴다.


Html에서 php로 파일을 올리게 되면 $_FILES 라는 전역변수 안에 정보가 담기고, 실제 파일은 php.ini에서 지정한 임시 디렉토리에 저장된다.

해당 경로는 $_FILES['업로드한 html form name']['tmp_name'] 에 저장되어 있으며, 해당 파일을 다시 Java API 쪽으로 넘겨 주면 된다.


넘겨주는 방법은 curl을 사용하면 된다.

다음과 같은 방법으로 하면 된다.






Content-Type을 multipart/form-data로 셋팅하는 부분은 많지만, 많이 찾기 힘들었던 부분은 ".';filename='.$file['name'].';type='.$file['type']" 이다.

html에서 php로 업로드 한 파일은 image/png 인데 php에서 Java로 curl을 통해 업로드 하게 되면, 기본적으로 application/octet-stream 타입으로 업로드 되기 때문이다.

이 부분을 html에서 업로드 한 그대로 by pass 하기 위해서는 위 소스와 같이 값을 지정해 주면 된다.


그 후 $response에서 받은 Json 값을 파싱하면 되는데

$response에는 header 정보도 같이 들어오게 되므로 body만 별도로 분리해야 한다.



이렇게 하게 되면 header를 제외한 순서 Json body 부분만 받을 수 있게 된다.

저작자 표시 비영리 변경 금지
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
[관련글1]
[관련글2]

일전에 위와 같은 문제로 고민 했던 적이 있었다.
그런데... QA 팀에 의해 BTS에 버그가 올라와서 오늘 미루던 버그를 수정하게 되었다.

스크립트를 이용한 history 문제가 있으니, 어쩔 수 없이 header를 이용하였다.
관련된 간단한 함수하나 만들고, header를 이용하니 가장 최 상단에 꼼수 아닌 꼼수로 집어 넣었다.
뭐 문제야 해결 되었다지만...
왜 MS는 자신들이 만들어 둔 버그를 수정하지 않아서 이렇게 날 고생시키는 것일까?
밉다 MS... ㅠㅠ

파폭에서는 아무 문제 없구먼... 흑...
MSDN에서 자신들 입으로 분명 history에도 안 남는다면서... -.-;;
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
secret