2014-01-09 57 views
1

我需要将截图从Flash保存到本地驱动器。由于受到一些限制,我很遗憾无法使用FileReference,因为它会产生一个对话框(以任何方式直接保存在本地?)或FileStream(AdobeAir),因为我仅限于SWF。AS3通过PHP保存图像

所以我决定尝试使用PHP来完成工作。

AS3

private function takePhoto():void { 
    var bitmapData:BitmapData = new BitmapData(800, 650); 
    var encoder:JPGEncoder = new JPGEncoder(100); 
    var byteArray:ByteArray; 
    var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream"); 

    bitmapData.draw(camHolder); 
    byteArray = encoder.encode(bitmapData); 
    var myRequest:URLRequest = new URLRequest("save.php"); 
    myRequest.requestHeaders.push(header); 
    myRequest.method = URLRequestMethod.POST; 
    myRequest.data = byteArray; 
    loader.addEventListener(Event.COMPLETE, imgSaved); 
    loader.load(myRequest); 
} 

private function imgSaved(event:Event):void { 
    trace(loader.data); 
} 

PHP

<?php 
if(isset($GLOBALS["HTTP_RAW_POST_DATA"])){ 
    $jpg = $GLOBALS["HTTP_RAW_POST_DATA"]; 
    $filename = "test.jpg"; 
    file_put_contents($filename, $jpg); 
} 
?> 

大约从我的AS3跟踪奇怪的imgSaved功能是,它正好返回字为我的PHP代码字。在这个过程中也没有保存图像。任何帮助,将不胜感激!

回答

0

实现这一点有一个棘手的方法。

您需要在SWF中提供下载链接(一个href HTML链接),供用户单击并开始下载图像。

按照以下步骤,看看它是否有助于:

  1. 使用method1method2

  2. Create an anchor tag as shown below

    <a href="data:application/octet-stream;base64,xxxxx" download="filename.jpg">Download</a>

    其中将图像转换的ByteArray为Base64图像' xxxxx'是图像的Base64编码字符串。

  3. 现在,当用户点击此链接时,图像应立即下载到用户指定的“下载”文件夹中。

声明:

  1. 将该溶液从另一溶液here启发。

  2. 据我所知,这可能只适用于当您的应用程序在浏览器中打开,而不是作为独立或AIR应用程序打开时。

  3. 我还没有尝试过自己,所以没有保证解决方案的有效性。

+0

谢谢!让我试试这个。 – user1234567

+0

嗨srvikram13,如果屏幕截图是在flash内部拍摄的,并使用jpgencoder进行编码的,我会如何将其上传到网络服务器上? – user1234567

+0

早就回来了,我做了一个类似的应用程序。我现在没有这个代码。但是,您可以尝试使用[** this **](http://www.beautifycode.com/webcam-flash-php-upload-to-server)教程中给出的PHP代码将图像保存到Web服务器上。 –