如何使用ajax和zend上传图像?

时间:2013-02-24 11:48:34

标签: ajax zend-framework

感谢您的考虑,对不起我提供的非信息性问题。

实际上我使用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)来将我的图像保存在数据库中

我的Controller文件操作如下所示:

    $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中执行此操作?

1 个答案:

答案 0 :(得分:2)

抱歉。我认为getAsBinary()在现代浏览器中不支持。您可以使用隐形画布使用ajax上传文件。

示例

 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) {

//做点什么

    }
});

在控制器方面,您可以重现图像`public function 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);
   }`