BitmapData из Flash -> PHP -> электронная почта - PullRequest
0 голосов
/ 24 марта 2011

Я пытаюсь сделать «скриншот» мувиклипа во Flash, закодировать его в виде Jpg с использованием класса AS Core Lib JPGEncoder, затем POST отправить полученный ByteArray в PHP и вставить изображение в сообщение, закодированное в MIME. .

В настоящее время я сохранил закодированный ByteArray из Flash, и это прекрасно работает, поэтому проблема заключается в отправке из Flash в PHP. Я использую SwiftMailer для отправки сложного электронного письма с jpeg в качестве вложения. В настоящее время сценарий, похоже, дает сбой в момент, когда я строю вложение из отправленных данных.

Вот скрипт действий:

trace("Sending Email");
    var rootMC:MovieClip = MovieClip(root);
    var data1:BitmapData = new BitmapData(rootMC.width, rootMC.height); 
    data1.draw(rootMC);

    var en:JPGEncoder = new JPGEncoder(80);
    var bArray:ByteArray=   en.encode(data1);

var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");

    var request:URLRequest = new URLRequest();
    request.requestHeaders.push(header);
    request.url = mailLoc;//MailLoc is the URL of the PHP.
    request.method = URLRequestMethod.POST;
    request.data = bArray;
    var loader:URLLoader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.BINARY;
    loader.addEventListener(Event.COMPLETE, MailCompleteHandler);
    try
    {
        loader.load(request);
    }
    catch(error:Error)
    {
        trace("Unable to load URL");
    }

А вот и PHP:

require_once 'lib/swift_required.php';  
$image = file_get_contents("php://input");  
$attachment = SwiftAttachment::newInstance($image, 'submission.jpg', 'image/jpg');//<--This line stuffs it  

$message = Swift_Message::newInstance()  
    /*Give the message a subject*/  
    ->setSubject('Your subject')  
    /*Set the from address with an associative array*/  
    ->setFrom(array('info@battleforbrisbane.com.au'=>'Battle for Brisbane'))  
    /*Set the to addresses with an associative array*/  
    ->setTo(array('jordaanm@gmail.com'))  
    /*Give it a body*/  
    ->setBody('Congratulations! You submission to Battle for Brisbane was received'); 
    $message->attach($attachment);//<--When the attachment above is commented out, so is this  

    $transport = Swift_SendmailTransport::newInstance();  
    $mailer = Swift_Mailer::newInstance($transport);  
    $mailer->send($message); 

Это для профессиональной работы, поэтому любая помощь будет принята с благодарностью.

Обновление: это не SwiftAttachment, это Swift_Attachment. Отсутствует подчеркивание, решена проблема, функционал приложения. Спасибо всем, кто написал мне, чтобы помочь мне с этим

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

Вы убедились, что закодированное изображение является действительным?

Если у вас есть локальный сервер или другой сервер, попробуйте его там.

Кроме того, вы можете попробовать загрузить одно изображение во флэш-память и отправить его на сервер и посмотреть, работает ли оно, вместо отправки сгенерированного изображения.

Что касается того, как отправить изображение со вспышки, попробуйте это

var request:URLRequest = new URLRequest( mailLoc );
request.contentType = 'application/octet-stream';
request.method = URLRequestMethod.POST;
request.data = bArray;

var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, MailCompleteHandler);
loader.addEventListener( IOErrorEvent.IO_ERROR, _onImageError );
try
{
    loader.load(request);
}
catch(error:Error)
{
    trace("Unable to load URL");
}


private function _onImageError(e:IOErrorEvent):void {
    trace("IOErrorEvent: ",e.type," : ",e.text) 
}

А для сценария php вы можете сначала попытаться сохранить файл.

//bindary data.
$image_bytes = $GLOBALS["HTTP_RAW_POST_DATA"];
//change to whatever works for you
$file_name = "testfile.jpg";
$file_path = "../uploads/$file_name";

$file = fopen( $file_path, 'w+' );

if ( !fwrite( $file, $image_bytes ) ) {
    return "Error writing to file: $file";
}

fclose( $file );
0 голосов
/ 31 марта 2011

Кажется, проблема все время заключалась в том, что мне не хватало подчеркивания в Swift_Attachment.Разве ты не ненавидишь это?

...