2014-08-29 1 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; 
} 

И другие вещи без успеха. Что я делаю неправильно и как это сделать правильно?

EDIT - это мой 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

Что именно происходит при загрузке? при первом взгляде одна вещь, которая может быть лучше, - это только ваш тип контента. Также вы используете относительный путь, который может быть проблемой .. так скажем, когда они загружают файл, существует ... что в вашем браузере происходит экстренно? – Soulan

+0

Я не думаю, что вы можете заставить диалог «сохранить как», так как это настройка браузера ... Люди могут выбрать автоматическую загрузку в предпочтительную папку ... – RichardBernards

+0

Что происходит: изображение попадает на сервер (с первая часть кода), а в Chrome в разделе Response сети (Web Developer Tools) я получаю ответ вроде: " 1 запросов | 513 KB переданы HeadersPreviewResponseCookiesTiming PNG IHDR { IDATx^ynQ'Vro # BHFhX06 $ {хр # <с & IʃX4 P1A & 4 [Jb-ZQ/[: yTwy ߻ OG} sTeee. ....... " Если речь идет о тип содержимого, я изменил его на изображение/jpg, спасибо за указание на это. – oneday

ответ

1

Вы не можете вызвать загрузку в ответ на запрос на фоне AJAX. Вам нужно будет направить главный браузер на URL-адрес, где происходит загрузка. Например, в вашем AJAX обратного вызова:

window.location = '/download.php'; 

Это означает, что вам нужно сохранить файл на стороне сервера в AJAX загрузить запрос затем он доступен для скачивания в отдельном следующем запросе к download.php где-то.

+0

Работает как сон! – oneday

Смежные вопросы