2014-08-29 59 views
0

我有一個js腳本,該服務器上的特定文件夾中保存的圖像。JPG格式:複製圖像文件到硬盤中PHP

$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; 
    }); 
}, 
+1

下載時發生了什麼?在第一次看時,可能更好的一件事就是您的內容類型。此外,您正在使用相對路徑,可能是一個問題..所以讓我們說,當他們下載的文件存在...什麼ecactly發生在您的瀏覽器? – Soulan 2014-08-29 07:55:23

+0

我不認爲你可以強制'另存爲'對話框,因爲這是一個瀏覽器設置...人們可以選擇自動將其下載到首選文件夾... – RichardBernards 2014-08-29 07:56:58

+0

發生了什麼:圖像到達服務器(與代碼的第一部分),並在Chrome網絡(Web開發工具)的響應部分我得到類似這樣的回覆:「 1請求| 513 KB轉移 HeadersPreviewResponseCookiesTiming PNG IHDR { IDATx^ynQ'Vro#BHFhX06 $ {XP# oneday 2014-08-29 08:01:26

回答

1

不能觸發響應背景AJAX請求下載。您必須將主瀏覽器指向發生下載的URL。例如,在您的AJAX回調:

window.location = '/download.php'; 

這意味着你將需要存儲在AJAX文件服務器端上傳請求,然後把它可供下載單獨的如下要求download.php地方。

+0

像夢一樣工作! – oneday 2014-08-29 09:48:32

相關問題