我有一个js脚本,可以将图像以.jpg格式保存在服务器上的特定文件夹中:
$data = substr($_POST['imageData'], strpos($_POST['imageData'], ",") + 1);
$decodedData = base64_decode($data);
$fp = fopen("imgdownload/cc.jpg", 'wb');
fwrite($fp, $decodedData);
fclose($fp);
下一步是用户将其保存在他/她的磁盘上,最好是打开一个对话框“另存为”并选择名称和位置,但只是强制下载到设置位置将是一个梦。
我试过了:
$file = 'imgdownload/cc.jpg';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: image/jpg');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
其他事情没有成功。我做错了什么,怎么做对了?
编辑 - 这是我的JS:
savePicture: function() {
$(this.el).find('canvas').attr('id', 'myCanvas');
var data = document.getElementById("myCanvas").toDataURL();
$.post("api/process.php", {
imageData: data
}, function(data) {
//window.location = data;
});
},
答案 0 :(得分:1)
您无法触发下载以响应后台AJAX请求。您必须将主浏览器定向到发生下载的URL。例如,在您的AJAX回调中:
window.location = '/download.php';
这意味着您需要将文件服务器端存储在AJAX上传请求中,然后在单独的以下download.php
请求中将其下载。