Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.03.2010, 14:44
Аспирант
Отправить личное сообщение для hangover Посмотреть профиль Найти все сообщения от hangover
 
Регистрация: 08.10.2009
Сообщений: 53

canvas, сохранение
на сайте есть страница, на которой с помощью js можно рисовать.
canvas=document.createElement("canvas");
... и тд. Все прекрасно работает.
Задача следующая: сохранять изображения.
в начале сделал так:
Код:
window.open(canvas.toDataURL("image/png"),"mywindow");
все работает, открывать новое окно, в котором изображение и его можно сохранить.
но нужно сохранять изображение на сервере. Пробовал передать base64 изображения гетом, или постом на сервер, но ето не вариант , т.к. если гет - то чаще всего получается сильно большая URL и сервер не хочет ее обрабатывать. Через POST - тоже через раз передает.

потом нашел еще бибилотеку .Теперь вместо нового окна с изображением выскакивает окно с предложением сохранить изображение.
(а самом деле просто изменили заголовок , как я понял.
.replace("image/png", "image/octet-stream"). Но сохраняет файл - без расширения. ( в опере название файла - default, в фф - ****.part где **** - первые 6 символов base4 кодировки )

Подскажите как передрать файл на сервер? ( через форму, через ифрейм, с помощью асинхронного запроса - не важно. ето потом можно настроить, главное чтобы передало и сохранило )

п.с. чего так кажеться вся задача - в передаче правильных заголовков. Но изображение - в base64 - то есть если передать то ето обычная строка. если сделать base64_deconde -> то по идеи и получим изображение. Но ету строку толком и не передать , т.. ее длина может достигать до 300 000 символов. Но браузер понимает етокак изображение. (адресная строка браузра в таком случае data:image/png;base64,iVBORw0KGgoA.....(дальше base64 строка))

еше как вариант
1) (не знаю просто возможно ли это) - перехватывать событие браузера, когда он предлагает сохранить изображение - и послать его на сервер.
2) "скопилить" изображение средствами javascript ( .. = new Image() ) - и предать на сервер. Как ето сделать я не знаю.


Молю вас о помощи, или хотя бы куда копать.

Последний раз редактировалось hangover, 17.03.2010 в 14:50.
Ответить с цитированием
  #2 (permalink)  
Старый 17.03.2010, 14:52
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

POST'ом все нормально должно передаваться.
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2010, 15:07
Аспирант
Отправить личное сообщение для hangover Посмотреть профиль Найти все сообщения от hangover
 
Регистрация: 08.10.2009
Сообщений: 53

POST`ом я передам саму base64 строку , на сервере сделать decode и сохранить? так предлагаете?

1) На пост нету ограничением по длинне передаваемых значений?
2)При передачи постом, почемуто пропадают все символы "+"
Ответить с цитированием
  #4 (permalink)  
Старый 17.03.2010, 15:14
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от hangover
POST`ом я передам саму base64 строку , на сервере сделать decode и сохранить? так предлагаете?
Вас что-то смущает?

Сообщение от hangover
1) На пост нету ограничением по длинне передаваемых значений?
Нет.

Сообщение от hangover
2)При передачи постом, почемуто пропадают все символы "+"
Эскейпить надо.
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2010, 15:30
Аспирант
Отправить личное сообщение для hangover Посмотреть профиль Найти все сообщения от hangover
 
Регистрация: 08.10.2009
Сообщений: 53

спасибо, все рашилось. я такв начале делал , но что то не получилось и я подумал что не парвильно и начал все усложнять)

вот пхп скрипт котрым сохраняю

$pic = explode(',',$_POST['data']);
$pic = str_replace(' ','+',$pic[1]);
$pic = base64_decode($pic);
$file = fopen('pic.png',w);
fwrite($file,$pic);




Сообщение от Kolyaj Посмотреть сообщение
Эскейпить надо.
вместо этого использовал str_replace.
Скажите пожалуйста, как эскейпить?)


и еше вопрос:
обизательно ли делать encode_URI при асинхронной передачи данных
...
  data: "data=" + options.data || ""
....
xml.open(options.type, options.url , true);
xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xml.send(options.data);

Последний раз редактировалось hangover, 17.03.2010 в 15:34.
Ответить с цитированием
  #6 (permalink)  
Старый 17.03.2010, 15:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от hangover
как эскейпить?
encodeURIComponent
Ответить с цитированием
  #7 (permalink)  
Старый 17.03.2010, 15:41
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

По поводу имени файла, попробуйте
.replace("image/png", "image/octet-stream; filename=myimage.png")
Ответить с цитированием
  #8 (permalink)  
Старый 22.03.2010, 03:02
Аспирант
Отправить личное сообщение для hangover Посмотреть профиль Найти все сообщения от hangover
 
Регистрация: 08.10.2009
Сообщений: 53

Сообщение от subzey
По поводу имени файла, попробуйте
.replace("image/png", "image/octet-stream; filename=myimage.png")
не помогло(
есть еше какиенибудь варианты?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas (разный цвет линий) neurostep Общие вопросы Javascript 2 26.10.2009 16:23
Как эта canvas влияет на https? demi Общие вопросы Javascript 4 28.08.2009 15:15
СОхранение изображения Ensiferum Общие вопросы Javascript 4 04.06.2009 20:57
Запрет на сохранение изображения Вoв@ Общие вопросы Javascript 37 07.02.2009 16:01
Сохранение данных для передачи с одной страницы в другую Andrey Freeman Общие вопросы Javascript 6 15.09.2008 22:32