Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вернуть картинку пользователю ajax-ом (https://javascript.ru/forum/misc/55095-vernut-kartinku-polzovatelyu-ajax-om.html)

Georrg 13.04.2015 19:17

вернуть картинку пользователю ajax-ом
 
Возвращает с ошибкой. Не знаю как побороть.
success: function(response, status, xhr)
				{
				        // check for a filename
					var filename = "";
					var disposition = xhr.getResponseHeader('Content-Disposition');
					if (disposition && disposition.indexOf('attachment') !== -1) {
						var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
						var matches = filenameRegex.exec(disposition);
						if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
					}
					var typecontent = xhr.getResponseHeader('Content-Type');
					var blob = new Blob([response], { type: typecontent, endings: 'transparent'});				

					if (typeof window.navigator.msSaveBlob !== 'undefined') {
						// IE workaround for "HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed."
						window.navigator.msSaveBlob(blob, filename);
					} else {
						var URL = window.URL || window.webkitURL;
						var downloadUrl = URL.createObjectURL(blob);

						if (filename) {
							// use HTML5 a[download] attribute to specify filename
							var a = document.createElement("a");
							// safari doesn't support this yet
							if (typeof a.download === 'undefined') {
								window.location = downloadUrl;
							} else {
								a.href = downloadUrl;
								a.download = filename;
								document.body.appendChild(a);
								a.click();
							}
						} else {
							window.location = downloadUrl;
						}

						setTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
					}
						document.body.style.cursor = 'default';
						gantt.ajax_screen = false;
						console.log("success");
					},

В случае успеха, необходимо вернуть картинку Серверная сторона:
$path = JPATH_ROOT.'/tmp';

ob_end_clean(); 
header('Content-Description: File Transfer');
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($path . '/' . $hash.'.png'));
header("Content-Disposition: attachment; filename=\"" . $hash.".png" . "\";");
header("Content-Transfer-Encoding: Binary");
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
if (function_exists('readfile')) {
	readfile($path . '/' . $hash.'.png');
}
else {
	echo file_get_contents($path . '/' . $hash.'.png');
}
jexit();

А результат:

Может кто добрым советом поможет? Буду очень благодарен!

Paguo-86PK 02.12.2015 20:17

Добрый вечер!

Заинтересовал следующий вопрос.
Всюду для динамической опциональной генерации картинок используются php-скрипты на серверной стороне.
А существуют ли механизмы, чтобы изображение с html-5 страницы, построенное в canvas, передать в другой сайт. Допустим, в форум.
Я понимаю, звучит дико. Так как легче приобрести нормальный php-хостинг и не париться.
Однако, чисто теоретически вопрос очень заинтересовал.
Может, существуют службы, которые открывают у себя любую html-страницу и возвращают её снимок?
Я даже ума не приложу: Если JS-коду я могу в адресной строке передать параметры, то каким образом сгенерированное canvas-изображение можно куда-то, кроме окна браузера, выдать?
Т.е. нужно браузер заставить перед открытием изображения в нужном месте одного сайта загрузить-исполнить-отобразить изображение скрипта другого (моего) ресурса.
Дело не в зломе и хаке, а просто тут понадобилось генерировать диаграммы и представить их в форуме тем, кому лень открыть страничку моего ресурса.

Спасибо!

P.S.: Нашёл несколько сервисов. Ни один не справляется: Отображается просто страница до исполнения без исполнения скрипта на ней.


Часовой пояс GMT +3, время: 09:34.