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 回答