2013-02-24 42 views
1

謝謝您的考慮,我很抱歉我的非信息性問題。如何使用ajax和zend上傳圖片?

其實我正在使用ajax和zend上傳文件。

我的AJAX代碼如下所示:

$.ajax({ 
     type: "POST", 
     url: "/business_general/imagesave", 
     enctype: 'multipart/form-data', 
     data: {'file': files.getAsBinary(), 'fname' : file.fileName}, 
     success: function(arrReturn){ 
      alert("Data Uploaded: "); 
     } 
}); 

在這裏,我叫一個控制器動作(imagesave)保存我的形象在數據庫

我的控制文件的操作是這樣的:

$config = Zend_Registry::get('config'); 
    $vehiclelogo = $config->paths->vehiclelogo; 
    $file = $objRequest->getParam('file'); 
    $ret = $objRequest->getParam('fname'); 
    $path_parts = pathinfo($ret); 

    echo $path_parts['extension'], "\n"; 
    echo $path_parts['filename'], "\n"; 

    $targetPath = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); 

    try { 
     echo "POSTED FILE NAME"." ". $ret; 
     echo "TYPE OF FILE UPLOADED"." "."-". gettype($ret); 
     $strFilePath = $vehiclelogo.'/'.$targetPath.'.'.$path_parts['extension']; 
     $OPfile = fopen($strFilePath,"w"); 
     fwrite($OPfile,$file); 
     fclose($OPfile); 
     echo "completed"; 
    } 
    catch (Exception $e) { 
     echo "error"; 
    } 

在這裏,我將選定的圖像上傳到一個文件夾中。實際上,我可以上傳文本文件。但是,如果我上傳png/jpeg文件,它會上傳到文件夾中,但事實是它無法打開。

我應該能夠上傳每種類型的文件。

如何在zend-php和ajax中執行此操作?

+0

請提高的格式化你的代碼,並看看你是否無法在這裏或那裏改進你的問題的措辭。 – hakre 2013-02-28 13:57:11

回答

2

對不起。我認爲getAsBinary()在現代瀏覽器中不支持。您可以使用不可見的畫布來使用ajax對文件進行uploding。

var canvas = document.getElementById("canvas") 
     canvas.width = img.width; 
     canvas.height = img.height; 
     var ctx = canvas.getContext("2d"); 
     ctx.drawImage(img,0,0); 
     var strdata = canvas.toDataURL("image/png"); 
     document.getElementById("company_logo").src=strdata; 
     $.ajax({ 
    type: "POST",             
    url: "/business_vehicle/vehiclegeneralsave",      
    data: "&data="+strdata, 
    success: function(arrResult) { 

//做點什麼

} 
}); 

在控制器端,你可以recive圖像`公共職能vehiclegeneralsaveAction(){

$file = $arrVehicleDetails = trim($objRequest->getParam('data')); 

     $strEncodedData = str_replace(' ', '+', $file); 
    $strFilteredData = explode(',', $strEncodedData); 
    $strUnencoded = base64_decode($strFilteredData[1]); 

    file_put_contents('../public/image/image.png', $strUnencoded); 
    }` 
+0

謝謝你。它的工作。非常感謝你 – 2013-04-08 11:08:58