2013-06-19 46 views
0

抱歉,如果這可能是一個俗套的問題,但不幸的是我無法更改項目設置。 我有一個PHP頁面上的窗體,應該發佈一些文本字段和文件輸入到MVC控制器操作。發佈部分工作,我成功地在我的ViewModel接收文本數據。但是,我不知道如何接收文件(圖像,將是JPG或PNG)。輸入類型文件的ID和名稱是「UserIcon」。將PHP/CURL文件發佈到ASP.NET MVC 2控制器

在我的ActionResult與HttpPostedFileBase試着這樣說:

public virtual ActionResult RegisterJson(RegistrationModels model, HttpPostedFileBase UserIcon) 

但UserIcon始終是NULL。相反,如果我有文件作爲RegistrationModels模型的一部分:

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

我收到捲曲路徑:@C:\\Windows\\Temp\\phpA03D.tmp;filename=Penguins.jpg;爲字符串。

但是從這裏我完全不知道我下一步要做什麼來保存文件。我試圖添加到卷頁頭$header = array("Content-type: multipart/form-data"); ,但所有發佈的表單字段都是NULL。

如果有人能指出我正確的方向,我會很感激!我想我在這裏有一個主要的停電和做一些完全錯誤的:-S

這是捲曲代碼的帖子在MVC操作:

$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); 

非常感謝!

乾杯, 卡羅琳

回答

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) 

...和還有其他的...

:-)

相關問題