![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 51
|
Привет всем!
Возникла следующая задача - сохранить картинку JPEG в виде ByteArray на сервере (плюс передать ещё пару переменных). Вот у меня счас так: //Провожу операции с изображением и затем конвертирую в джипег var jpgEncoder:JPEGEncoder = new JPEGEncoder(90); var jpgStream:ByteArray = jpgEncoder.encode(jpgSource); //Задаю переменные для отправки var vars:URLVariables = new URLVariables(); vars.action = 'flashLoad'; vars.image = jpgStream; //Создаю URLRequest var req:URLRequest = new URLRequest(); req.url = "/files/uploader.php"; req.data = vars; req.method = URLRequestMethod.POST; //Отправляю var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.load(req); может я не то отправляю? может я отправляю ссылку на ByteArray ? подскажите плиз где ошибка) Заранее спасибо откликнувшимся! |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 127
|
Возможно, вы забыли указать Content-type
Как-то так.. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
1) не передовать текстовые данные (т.е. переменные) и бинарные в одном пакете, они херят друг-друга. Т.е.
req.data = myByteArrayInstance; а не req.data = myObjectInstance; не совсем правда, можно в ByteArray запихнуть и переменные и картинку, но распаковать это придется ручками(тогда смотреть в сторону amf). 2) читать бинарные данные не из $_POST, а из $GLOBALS["HTTP_RAW_POST_DATA"]; ну, вот хороший пример.
__________________
мой пустой блог |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 51
|
Спасибо за предложения)
ratin, хедеры не помогли) iflamberg, ну повидиму они действительно "херят" друг друга) а жаль) Вобщем на данный момент работает так: var req:URLRequest = new URLRequest(); req.url = "/files/uploader.php?name=myPicture"; req.method = URLRequestMethod.POST; req.contentType = 'application/octet-stream'; req.data = jpgStream; var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE,uploadComplete); loader.load(req);
С использованием URLVariables() почему-то не проходит) |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
представь себе, что ты через script.php?var1=val&var2=val пытаешься передать бинарные данные(где, в том числе встречаются %,&,? и любые другие символы). Примерно то же самое происходит, когда ты пытаешься передать и картинку и переменные через POST.
Если ты хочешь передать картинку через POST, как переменную, то тебе её нужно закодировать так, как кодируют бинарные данные при передаче по эл. почте, т.е. base64 алгоритмом. Готовые решения base64 легко нагуглить. Другой способ - это сериализовать данные в flash в ByteArray и распаковать их в пхп. Сериализовать: ... var obj:Object = {}; obj.reportData = this.reportData; obj.periodData = this.periodData; obj.graph = byteArrayOfPic; var ba:ByteArray = new ByteArray(); ba.writeObject(obj); req.data = ba; ... C zend например так:
Короче говоря, выбраный тобой способ - по GET передавать переменные, по POST - бинарник - не самый худший способ.
__________________
мой пустой блог |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 51
|
iflamberg, да, ты прав) я уже понял что способ неверный) поэтому решил перегонять всё POST`ом, предварительно закодировав ByteArray в base64.
Вот такой получился код: var jpgEncoder:JPEGEncoder = new JPEGEncoder(90); var jpgStream:ByteArray = jpgEncoder.encode(jpgSource); var jpgEncoded:String = encodeByteArray(jpgStream); var vars:URLVariables = new URLVariables(); vars.action='testVar'; vars.image=jpgEncoded; var req:URLRequest = new URLRequest(); req.url='/files/uploader.php'; req.method=URLRequestMethod.POST; req.data=vars; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE,uploadComplete); loader.load(req); |
|
|||||
|
http://designreviver.com/tutorials/a...ges-from-flash
Только там пхп не сохраняет, а выдаёт пользователю рисунок назад. Думаю не проблема его поправить.
__________________
if (love is true) break my.heart; |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 51
|
ГГГггг))))))))
Rzer, спасибо за участие))))))) iflamberg, ниругайся) |
|
|||||
|
С кем не бывает..
__________________
if (love is true) break my.heart; |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|