1

感谢您的考虑,我很抱歉我的非信息性问题。

实际上我正在使用 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 中执行这个?

4

1 回答 1

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);
   }`
于 2013-04-08T11:00:03.850 回答