在PHP中将图像文件从服务器复制到磁盘

在PHP中将图像文件从服务器复制到磁盘,php,save,Php,Save,我有一个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); 下一步是让用户将其保存到自己的磁盘上,最

我有一个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;
    });
},

您不能触发下载以响应后台AJAX请求。您必须将主浏览器指向进行下载的URL。例如,在AJAX回调中:

window.location = '/download.php';

这意味着您需要将文件服务器端存储在AJAX上传请求中,然后在以下单独的请求中下载到
download.php
某处。

下载时会发生什么?乍一看,一件可能更好的事情就是你的内容类型。此外,您使用的是相对路径,这可能是一个问题。。假设他们下载的文件存在。。。您的浏览器中会发生什么情况?我不认为您可以强制执行“另存为”对话框,因为这是一个浏览器设置。。。人们可以选择自动将其下载到首选文件夹中……发生了什么:图像进入服务器(带有代码的第一部分),在Chrome的网络响应部分(Web开发人员工具),我得到一个类似“1请求”的响应❘ 513 KB已转移磁头预览响应ookiestiming�巴布亚新几内亚IHDR����{� IDATx^��Y�N�Q'V�R�����o#BH��跳频�X0��6.�$�{��x�����P�#好了,你得到了图像数据。很好,这正是你想要的。随机猜测:你是通过AJAX提交图像的吗?我使用$.post-我编辑了这个问题并添加了js代码。那么现在如何继续?