2014-06-18 1 views
4

Ok 약간의 배경 지식을 제공합니다. 나는 광고와 제품 등을 다루는 CakePHP로 작성된 시스템 A를 가지고있다. 최근에 저는 Laravel로 작성된 다른 시스템에서 일하고 있습니다.이 시스템은 부동산 중개인이 시스템 A에있는 부동산 리스팅을 게시하고 관리 할 수있는 자체 서비스 도구입니다. 이제는 자체 시스템에서 이미지를 업로드하는 시점에 있습니다. 사이트를 시스템 A에 제공합니다. 저는 Cake에서 POST 요청을 처리하고 이미지 파일을 서버에 저장하는 간단한 컨트롤러 작업을 작성했습니다.POST에서 파일 및 필드가있는 메시지 요청

http://example.com/image/add 

나는, POST 요청을 보낼 이미지를 업로드 및 postman 같은 REST 응용 프로그램을 사용하여 적절한 응답을 얻을 수 있어요. 모든 것은 시스템 A (케익) 측면에서 잘 어울립니다.

이제 셀프 서비스 시스템 인 Laravel에서 Guzzle을 사용하여 HTTP 요청을 보냅니다. 나는 똑같은 필드와 파일을 가진 지글 머리글 게시물 요청을 채웠지 만 동일한 출력을받지 못합니다. 요청은 시스템 A에 의해 수신되지만 이미지는 추가되지 않으며 임의의 HTML 페이지가 리턴됩니다. 우편 배달부와 몇 가지 다른 응용 프로그램이 똑같은 응답과 기능을 갖지만 Guzzle에서 보낸 요청이 아니라면 내 요청에 문제가 있다고 생각합니다. 여기

$client = new Client(); 

    // Create the request. 
    $request = $client->createRequest("POST", "http://example.com/image/add"); 

    // Set the POST information. 

    $postBody = $request->getBody(); 
    $postBody->setField('user_id', $userId); 
    $postBody->setField('api_key', $token); 
    $postBody->setField('product_id', $product_id); 
    $postBody->addFile(new PostFile('image[data]', fopen('tmp/images/'.$input->image, 'r'))); 

    // Send the request and get the response. 
    $response = $client->send($request); 

우체부에서 작업 POST 요청한다 : 여기 내 목구멍 코드가 여기에

POST /image/add HTTP/1.1 
Host: example.com 
Cache-Control: no-cache 

----WebKitFormBoundaryE19zNvXGzXaLvS5C 
Content-Disposition: form-data; name="product_id" 

1000 
----WebKitFormBoundaryE19zNvXGzXaLvS5C 
Content-Disposition: form-data; name="user_id" 

8345 
----WebKitFormBoundaryE19zNvXGzXaLvS5C 
Content-Disposition: form-data; name="api_key" 

secretKey 
----WebKitFormBoundaryE19zNvXGzXaLvS5C 
Content-Disposition: form-data; name="data[image]"; filename="steve-jobs.jpg" 
Content-Type: image/jpeg 


----WebKitFormBoundaryE19zNvXGzXaLvS5C 

문자열로 목구멍 요청한다, 나는 가독성 문제에 대해 사과드립니다.

POST /image/add HTTP/1.1 Host: example.com User-Agent: Guzzle/4.0.2 curl/7.22.0   PHP/5.5.9-1+sury.org~precise+1 Content-Length: 124647 Content-Type: multipart/form-data; boundary=53a1f21e04080 --53a1f21e04080 Content-Disposition: form-data; name="user_id" 8345 --53a1f21e04080 Content-Disposition: form-data; name="api_key" secretKey --53a1f21e04080 Content-Disposition: form-data; name="product_id" 1000 --53a1f21e04080 Content-Disposition: form-data; filename="steve-jobs.jpg"; name="image[data]" Content-Type: image/jpeg 

그런 다음 이미지 데이터의 문자를 묶습니다.

누구든지 내 POST 요청으로 문제를 볼 수 있는지 물어 보는 중입니다.

편집 : 내가 파일 필드 이름에 단지 작은 실수 말할 수있는 나는 지금까지

+0

항상 정확한 CakePHP의 버전을 언급하고 그에 따라 귀하의 질문에 태그를하시기 바랍니다 - 감사합니다! – ndm

+0

케이크 PHP 버전을 추가했습니다. 다음 번에 그 점을 명심하십시오! – user3753755

+0

동일한 문제가 있습니다. 솔루션을 찾지 못했습니까? – Mosaic

답변

2

CakePHP의 2.4.1을 사용하고, 그것은 data[image]하지 image[data]해야한다. 앱에서

new PostFile('data[image]', /* ... */); 

당신은 아마 그러나 그것은 그렇지 않으면 CakeRequest::$params['form']에 추가되고, 경우에 그것이 data 키에 싸여이 땅에만 것, 파일 데이터가 CakeRequest::$data를 통해 사용할 수있는에 의존하고 있습니다.

별로 중복 그러나 대한 (더 CakePHP의 양식 도우미 관련) 참조 항목 :

CakePHP: posted file data not included in request->data

+0

답변 해 주셔서 감사합니다. 그게 문제이고 나는 그것을 고쳤다. 그러나 내 문제는 여전히 적절한 응답을 얻지 못하고 있다는 점에서 계속됩니다. – user3753755

+0

@ user3753755 무엇이 문제인지, 예를 들어 정확한 응답, 관련 CakePHP 컨트롤러 코드 및 가능한 디버깅 결과 (정확히 어떤 데이터인지 등)를 알기 위해서는 더 많은 정보를 추가해야합니다 표시된 요청에 대해 CakePHP에서 사용 가능). – ndm