Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.04.2015, 19:17
Аспирант
Отправить личное сообщение для Georrg Посмотреть профиль Найти все сообщения от Georrg
 
Регистрация: 06.08.2014
Сообщений: 58

вернуть картинку пользователю 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();

А результат:

Может кто добрым советом поможет? Буду очень благодарен!
Ответить с цитированием
  #2 (permalink)  
Старый 02.12.2015, 20:17
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

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

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

Спасибо!

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

Последний раз редактировалось Paguo-86PK, 02.12.2015 в 22:00.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вернуть результат из ajax внутри функции? Rooner AJAX и COMET 4 29.03.2013 19:15
Вернуть результат ajax в переменную Markus AJAX и COMET 4 27.01.2013 19:09
Вернуть данные из ajax функции laandrew Общие вопросы Javascript 5 15.12.2012 16:44
как вернуть success (ajax) shaltay jQuery 3 20.01.2012 18:39
Загрузить картинку на пользователю, а не отобразить в браузере vahrusha Events/DOM/Window 2 19.09.2010 07:40