0

安っぽい質問かもしれませんが、残念ながらプロジェクトの設定を変更することはできません。PHP ページにフォームがあり、いくつかのテキスト フィールドとファイル入力を MVC コントローラー アクションに投稿することになっています。投稿部分が機能し、ViewModel でテキスト データを正常に受信しました。ただし、ファイルを受信する方法がわかりません(画像はjpgまたはpngのいずれかになります)。入力型ファイルのIDとNAMEは「UserIcon」です。

ActionResult では、次のように HttpPostedFileBase で試しました。

public virtual ActionResult RegisterJson(RegistrationModels model, HttpPostedFileBase UserIcon)

ただし、UserIcon は常に NULL です。RegistrationModels代わりに、モデルの一部としてファイルがある場合:

    [DisplayName("Ihr Foto")]
    public string UserIcon { get; set; }   

curl path:@C:\\Windows\\Temp\\phpA03D.tmp;filename=Penguins.jpg;を文字列として受け取ります。

しかし、ここからは、ファイルを保存するために次に何をしなければならないかについてはまったくわかりません。curl ヘッダーに追加しようとしました$header = array("Content-type: multipart/form-data"); が、投稿されたフォーム フィールドはすべて NULL です。

誰かが私を正しい方向に向けることができれば、とても感謝しています! 私はここでメインの停電が発生していて、完全に間違ったことをしていると思います:-S

これは、MVC アクションに投稿する curl コードです。

    $postargs = array();
    foreach ($_FILES as $param => $file) {
        $postargs[$param] = '@' . $file['tmp_name'] . ';filename=' . $file['name'] . ';';
    }
    $fields_string = "";
    //url-ify the data for the POST
    foreach($_POST as $key=>$value) {
        $fields_string .= $key.'='.$value.'&';
    }

    $fields_string .= http_build_query($postargs);

    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST,count($_POST));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

    $result = curl_exec($ch);

    curl_close($ch);

どうもありがとう!!

乾杯、キャロライン

4

1 に答える 1

1

その上で寝るだけで役立つこともあります。curl で投稿する前に、ファイルをサーバーに保存する必要があります。右!!興味があるかもしれない人のために、私は私の実用的な解決策を投稿しています:

$upload_directory=str_replace("\includes","",dirname(__FILE__)).'/local/';

//check if form submitted

if (!empty($_FILES['UserPortrait'])) {
    //check for image submitted
    if ($_FILES['UserPortrait']['error'] > 0) {
        // check for error re file
        echo "Error: " . $_FILES["UserPortrait"]["error"] ;
        exit;
    } else {
        //move temp file to our server
        move_uploaded_file($_FILES['UserPortrait']['tmp_name'],
        $upload_directory . $_FILES['UserPortrait']['name']);
        //echo 'Uploaded File.';
    }
} else {
    die('File not uploaded.');
    // exit script
}


$post_data = array (  
    "UserPortrait" => "@".$upload_directory . $_FILES['UserPortrait']['name'].';type='.$_FILES['UserPortrait']['type']    
); 
foreach($_POST as $key=>$value) {
    $post_data[$key] = $value;
}

$ch = curl_init();      
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/handler.php");      
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
curl_setopt($ch, CURLOPT_POST, 1);      
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);     
$output = curl_exec($ch);      
curl_close($ch);      
echo $output;  

MVC コントローラー アクションでポスト データを受信することは、今や魅力のように機能します。

public virtual ActionResult RegisterJson(RegisterModels model, HttpPostedFileBase UserPortrait)

...そしてそこから残りを行います...

:-)

于 2013-06-20T10:14:37.870 に答える