0

ファイルアップロードフィールドを持つ multipart/form-data の php curl で json データを投稿したいです。私はアクションでcakephp 2でこれを試しました:

public function json_post(){

    $this->autoRender = false;
    debug('json post test');

    $data = array('Post' => array(
        'subject' => 'test subject content',
        'body' => 'test body content'
        'fileName' => '/Users/mar/Pictures/cow_wall_90.jpg'
    ));                                                                    
    $data_string = json_encode($data);                                                                                   

    $ch = curl_init('http://www.mydomain.com/posts/phone_upload.json');                                                                      
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
            //'Content-Type: multipart/form-data', 
            'Content-Type: application/json',                                                                                
            'Content-Length: ' . strlen($data_string))                                                                       
    );                                                                                                                   

    $result = curl_exec($ch);

    debug($result); 


}

fileName は、フォームのファイル アップロード フィールドに相当します。件名と本文は、フォームのテキスト フィールドに相当します。何かがデータ配列または Content-Type にある可能性がありますが、問題が見つかりません。

助けてくれてありがとう、よろしく、マーティン

4

1 に答える 1

0

http://dtbaker.net/web-development/uploading-a-file-using-curl-in-php/から: ファイル パスの前にある @ に注目してください。これは魔法の部分です。

<?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
    curl_setopt($ch, CURLOPT_URL, _VIRUS_SCAN_URL);
    curl_setopt($ch, CURLOPT_POST, true);
    // same as <input type="file" name="file_box">
    $post = array(
        "file_box"=>"@/path/to/myfile.jpg",
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    $response = curl_exec($ch);
?>

魔法の部分が欠けていたようです。

cURL から CakePHP の HttpSocket に切り替えることもできますが、それは個人的な好みにすぎません。 http://book.cakephp.org/2.0/en/core-utility-libraries/httpsocket.html

于 2013-04-10T10:50:13.930 に答える