感谢您的考虑,对不起我提供的非信息性问题。
实际上我使用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中执行此操作?
答案 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);
}`