![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2013
Сообщений: 2
|
Есть конструктор на флеш. Полученный результат (по сути movieclip) нужно трансформировать в изображение (формат не имеет значения .png, .jpg все подойдет) и послать на почту вместе с другими параметрами. Я так понимаю задача достаточно стандартная и вполне возможно у кого-то есть готовая заготовка. Прилагаю собственную попытку решения проблемы, но вместо картинки приходит пустой файл. Где ошибка?
Flash import JPGEncoder; finish.addEventListener(MouseEvent.CLICK,sendData); function sendData(event:MouseEvent):void { var bmpData:BitmapData = new BitmapData(mc.width, mc.height,false,0xFFFFFF); bmpData.draw(mc); var jpgEncoder:JPGEncoder = new JPGEncoder(80); var imgByteData:ByteArray = jpgEncoder.encode(bmpData); var sendVariables:URLVariables = new URLVariables(); sendVariables.mail_to = "wessness@xxxxxxxxx.com"; sendVariables.mail_from = "wes@xxxxxxxxxxx.com"; sendVariables.sub = "Email Subject"; sendVariables.bod = "This is the body."; sendVariables.image = imgByteData; trace("Encoded File to Send: " + imgByteData); var requestURL:URLRequest = new URLRequest("send.php"); requestURL.method = URLRequestMethod.POST; requestURL.data = sendVariables; var loader:URLLoader= new URLLoader(); loader.addEventListener(Event.COMPLETE, spriteSend); loader.addEventListener(Event.OPEN, traceEvent); loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, traceEvent); loader.addEventListener(IOErrorEvent.IO_ERROR, traceEvent); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, traceEvent); loader.addEventListener(ProgressEvent.PROGRESS, traceEvent); try { loader.load(requestURL); } catch (e: * ) { txt.text = "error"; } function traceEvent(e:*):void { txt.text = "processing..."; } function spriteSend(e:Event):void { txt.text = "data succesfully sent"; } } <?php $img = $_POST['image']; xmail($_POST['mail_to'],$_POST['mail_from'],$_POST['sub'],$_POST['bod'],imagecreatefromstring(base64_decode($img))); function xmail($email_address,$email_from,$subject,$msg,$attach_file) { $mail_attached = ""; $boundary = md5(uniqid(time())); $mail_attached .= "--".$boundary."\r\n" ."Content-Type: image/png; name=\"picture\"\r\n" . "Content-Transfer-Encoding: base64\r\n" . "Content-Disposition: attachment; filename=\"imagePic\"\r\n\r\n" .chunk_split($attach_file)."\r\n"; $mail_attached .= "--".$boundary." \r\n"; $add_header ="MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$boundary\""; $mail_content = "--".$boundary."\r\n" . "Content-Type: text/plain; charset=iso-8859-1; format=flowed\r\n" . "Content-Transfer-Encoding: 8bit\r\n\r\n" . $msg."\r\n\r\n".$mail_attached; mail($email_address,$subject,$mail_content,"From: ".$email_from."\r\n".$add_header.""); } ?> Последний раз редактировалось uglygoose; 02.11.2013 в 17:45. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
uglygoose, для оформления своего кода надо использовать теги [as3][/as3]
__________________
Reality.getBounds(this); |
|
|||||
|
У меня похожая была проблема. Тоже задавал здесь вопрос, но так никто и не решился помочь.
http://www.flasher.ru/forum/showthread.php?t=203810 В итоге после нескольких дней исследований и неудач, сделал я следующее: 1. Сначала сохраняем на сервере картинку. 2. После ответа от сервера о успешном сохранении, берем эту картинку и отправляем на почту (там уже картинка в письме была нормальная). Добавлено через 10 часов 41 минуту Вот класс сохранения изображения PHP:
package as3lib.net { import flash.display.DisplayObject; import flash.display.Sprite; import flash.display.BitmapData; import flash.utils.ByteArray; import as3lib.images.JPGEncoder; import flash.net.NetConnection; import flash.events.NetStatusEvent; import flash.net.Responder; import flash.events.EventDispatcher; import flash.events.Event; public class SavingImage extends EventDispatcher { private var _netConnection: NetConnection; private var _encoder: JPGEncoder; /** * Конструктор * @param image Изображение * @param gateWayURL Путь */ public function SavingImage(image: DisplayObject, gateWayURL: String) { var bmd:BitmapData = new BitmapData(image.width, image.height); bmd.draw(image); _encoder = new JPGEncoder(100); var ba:ByteArray; ba = _encoder.encode(bmd); ba.compress(); _netConnection = new NetConnection(); _netConnection.connect(gateWayURL); _netConnection.addEventListener(NetStatusEvent.NET_STATUS, statusEvent); _netConnection.call('SaveImage/saveImage', new Responder( handleResult, handleError ), ba); } /** * Функция обрабатывает результат, возвращенный от сервера после сохранения изображения * @param data */ private function handleResult(data:Object):void { trace(data.status); if (data.status == 'save_succeed') dispatchEvent(new Event(Event.COMPLETE)); } private function handleError():void { trace('error'); } private function statusEvent(e:NetStatusEvent):void { trace(e.info.details); } } } Класс PHP для отправки письма: <?php
И AS3: package as3lib.net { import flash.display.BitmapData; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.NetStatusEvent; import flash.net.NetConnection; import flash.net.Responder; import flash.utils.ByteArray; import as3lib.images.JPGEncoder; import flash.display.Sprite; /** * ... * @author ratush */ public class SendMail extends EventDispatcher { public static const COMPLETE: String = 'complete'; public static const ERROR: String = 'error'; private var _netConnection: NetConnection; private var _encoder: JPGEncoder; public function SendMail(gateWayURL: String, data: Object) { _netConnection = new NetConnection(); _netConnection.connect(gateWayURL); _netConnection.addEventListener(NetStatusEvent.NET_STATUS, statusEvent); _netConnection.call('Send/sendMail', new Responder( handleResult, handleError ), data); } private function handleResult( result:Object ):void { trace( result.status ); if ( result.status == 'send_succeed' ) dispatchEvent( new Event(SendMail.COMPLETE) ); else dispatchEvent( new Event(SendMail.ERROR) ); } private function handleError():void { trace('error connect'); } private function statusEvent(e:NetStatusEvent):void { trace(e.info.details); } } } Тут мы сохраняем картинку и потом отправляем: new SavingImage(_model.bitmapSeal, 'http://host.eu9.org/test/amfphp/Amfphp/').addEventListener(Event.COMPLETE, savingImage); private function savingImage(e:Event):void { e.target.removeEventListener(Event.COMPLETE, savingImage); var data: Object = new Object(); data.to = '4884125@i.ua'; data.from = '4884125@i.ua'; data.subject = 'Заказ'; data.message = 'Текст'; new SendMail( 'http://host.eu9.org/test/amfphp/Amfphp/', data); } |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 2
|
спасибо.
|
|
|||||
|
Без сохранения картинки? Поделитесь кодом.
![]() |
|
|||||
|
Вчера полдня просидел
![]() saveFile(bitmapData, "http://your_site/mail/sendmail.php"); public function saveFile(bd:BitmapData, scriptLocation:String):void { var byteArray:ByteArray = new ByteArray(); bd.encode(new Rectangle(0,0,bd.width, bd.height), new JPEGEncoderOptions(90), byteArray); var encodedFile:Base64Encoder = new Base64Encoder(); encodedFile.encodeBytes(byteArray); var data:URLVariables = new URLVariables(); data.fileData = encodedFile; var request:URLRequest = new URLRequest(scriptLocation); request.method = URLRequestMethod.POST; request.data = data; var loader:URLLoader= new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; loader.addEventListener(flash.events.Event.COMPLETE, onServerResponse); loader.addEventListener(flash.events.Event.OPEN, traceEvent); loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, traceEvent); loader.addEventListener(IOErrorEvent.IO_ERROR, traceEvent); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, traceEvent); loader.addEventListener(ProgressEvent.PROGRESS, traceEvent); try { loader.load(request); } catch (e:*) { trace("an error occured of type", e); } function traceEvent(e:*):void { trace(e); } } private function onServerResponse(event:flash.events.Event):void { var loader:URLLoader = URLLoader(event.target); trace("onServerResponse: " + loader.data); }
Проверил на двух хостингах - работает.
__________________
In Code We Trust |
|
|||||
|
Бомба.
Максимум что у меня получилось, то это присылать как-бы пустой файл. Так и знал, что проблема была в header-ах письма, но ни флешеры ни ПХП-шники ни на одном форуме не помогли тогда. ![]() Просто супер.) |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|