2011-03-24 16 views
0

私はFlashでムービークリップの 'screenshot'を取って、AS Core Lib JPGEncoderクラスを使ってJpgとしてエンコードしてから、結果のByteArrayをPHPに送信します。イメージをMIMEでエンコードされた電子メールに埋め込みます。BitmapData from Flash - > PHP - >メール

現在のところ、FlashからエンコードされたByteArrayを保存していますが、正常に動作するため、FlashからPHPへの送信に問題があります。 SwiftMailerを使用してjpegを添付ファイルとして複合メールを送信しています。現在、送信されたデータから添付ファイルを作成する時点で、スクリプトがクラッシュしているようです。ここで

は、ActionScriptです:

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('[email protected]'=>'Battle for Brisbane')) 
    /*Set the to addresses with an associative array*/ 
    ->setTo(array('[email protected]')) 
    /*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です。不足しているアンダースコア、問題解決、アプリケーション機能

+0

これは[昨日あなたの質問の正確な重複](http://stackoverflow.com/questions/5399235/bitmapdata-from-flash-to-php-to-email)と思われます。私はまだ1x1 GIFの生の出力を見ることが大好きですが、ここではありません。 – Charles

+0

これは昨日の質問の洗練されたバージョンです。マイナーな問題のいくつかは自分で解決しました(手動でエンコードする代わりにSwiftMailerを使用)。しかし、大きな問題は終了していません。 1x1ピクセルの点では、Flash-> PHPから送信されるデータは、書き込み(fwrite)またはMIME接続を拒否します。 –

+0

'$ image'は' strlen'を持っていますか? – Charles

答えて

0

Swift_Attachmentのアンダースコアが欠落していたようです。あなたはそれを憎んでいないのですか?

+0

そう、それは吸う。しかし、適切な "デバッグ"方法論では、問題のコードを分離するのは簡単でした。基本的には、全体を小さなタスクに分割してテストし、次にそのタスクを上に構築します。現在のタスクが失敗すると、どこにフォーカスできるかが分かります。 – goliatone

2

エンコードされた画像が有効であることを確認しましたか?

ローカルサーバーまたは別のサーバーをお持ちの場合は、そこで試してみてください。

また、1つのイメージをフラッシュにロードし、そのイメージをサーバーに送信し、生成されたイメージを送信する代わりに、そのイメージが動作するかどうかを確認できます。

フラッシュから画像を送信する方法については、この

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

そのゴリアトンをありがとう。私はあなたが提案した変更を加えました。 Flashの終了時にIO問題のフラグが立てられていません。なんらかの理由で、PHPスクリプトはファイルを書きません。奇数... –

+0

別のPHPをセットアップしようとしましたか?または、あなたが以前にアップロードした画像を、生成された画像ではなく送信しますか? – goliatone

関連する問題