질문 Q #24858
ci4 getFile 질문드립니다.
ci매니아 2022-11-04 18:30:44

curl post 로 formdata로 받은 파일값($_FILES)을 아래처럼 전송하였는데 

POSTFIELD = array('filedata'=>$_FILES['upload_file']);

 

받는 쪽에서 $this->request->getFile('filedata'); 로도 인식이 안되는데 무엇이 문제인지요...?

답변 10
#1 테러보이 2022-11-07 11:03:10

$this->request->getFiles();

로 전체 체크 해보신후 파일이 전달 됬는지 체크 하시고

https://solbel.tistory.com/2282

https://www.habonyphp.com/2020/12/php-curl.html

도 확인 바랍니다.

#2 ci매니아 2022-11-07 11:31:05
확인해보았는데 파일부분만 안됩니다... 다른 값은 넘어오는데 뭐가 문제인지 ;;
#3 테러보이 2022-11-07 13:18:58
그럼 파일 전송 자체가 안된것 같은데요 링크쪽을 확인해보세요
#4 ci매니아 2022-11-07 13:33:31

<form action> action을 바로 컨트롤러로 넘기면 getFile이 작동합니다만.

<form>으로부터 넘겨받은 $_FILES를 curl로 보내는 과정에서 안되는것같습니다.

달아주신 링크대로 하여도 안됩니다..

#5 테러보이 2022-11-07 13:53:50

Content-Type: multipart/form-data

헤더도 추가 하신거 맞죠?

#6 ci매니아 2022-11-07 13:57:50

네 그렇습니다. Content-Type도 curl header에 추가했습니다.

- curl

1.

$filename = $_FILES['upload_file']['tmp_name']; 
$handle = fopen($filename, "r"); 
$data = base64_encode(fread($handle, filesize($filename)));

$post_field = array('upload_file'=>$data);

2. 

$post_field = $_FILES;

 

- ci4

$this->request->getFile('upload_file'); // 반응없음..

 

<form><input type="file" name="upload_file" /></form>에서 action으로 바로 ci4로 넘기면 반응이 있지만 curl을 통하여 $_FILES를 보내니 반응이 없음.

<form>에서 바로 전송했을때 getFile()의 값을 찍어보니 

CodeIgniter\HTTP\Files\UploadedFile Object ([path:protected] ....) 이렇게 쭉 나오는데 이게 curl로 보낼때는 어떻게 해야 동일한 결과로 나오는지...

 

#7 ci매니아 2022-11-07 14:29:31

File뿐만이 아니라 curl POSTFIELD로 넘기는 post 값이던 file 값이던 getPost, getFile로 출력하려해도 안나옵니다.

curl로 ci4쪽에 POSTFIELD 전송할떄 유의해야할 것이 있나요?

curl 전송시키는 파일은 ci4가 아니라 하드코딩으로 구성된것입니다.

#8 테러보이 2022-11-07 15:38:06

base64_encode 로 보냈으면 받는곳에서 디코드 하셔야 하고

curl로 받는 쪽도 ci면 csrf도 체크 해보시구요(아님 필터에 추가하거나)

curl보낸뒤 리스폰 하고 http코드도 찍어보시구요.

 

파일 전송은 링크중 https://solbel.tistory.com/2282 참조하시구요

#9 ci매니아 2022-11-07 16:00:34

디코드도 값이 있어야 할텐데 아무 반응이 없습니다..

그냥 getFile(), getPost 로 찍었을때 아무것도 뜨질않습니다.

 

<form>태그에서 curl페이지로 전송하여 POSTFIELD에 담아 보내는 절차인데 curl페이지에서 뭔가 잘못됬는지 안되네요 ;

정석이 있는건지 ;;

 

제가 원하는 순서는

<form><input file> 전송 -> CURL POSTFIELD에 받은 input file정보 담아서 지정한 URL로 전송 -> 받은 컨트롤러에서 getFile()로 가공하여 업로드처리

 

인데 이게 안되네요;

 https://solbel.tistory.com/2282 여기도 검색하다 시도해보았지만 동일합니다.

#10 테러보이 2022-11-07 18:22:17
리스폰 하고 코드는 찍어보셨나요?