2013-02-24 25 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