我将图像加载到Flash中并使用JPGEncoder将图像编码为ByteArray并将其发送到AMF PHP,后者将bytearray写入文件。这一切似乎都正常工作,我可以在Photoshop CS4中下载生成的文件绝对正常。当我尝试从桌面打开它或在Flash中打开它时它不起作用... Picasa我的默认图像浏览器显示“无效”
这是我用来将bytearray写入文件的代码 -
$jpg = $GLOBALS["HTTP_RAW_POST_DATA"];
file_put_contents($filename, $jpg);
就是这样......我使用NetConnection类来连接和调用服务,我是否需要说我发送jpg数据?我假设JPGEncoder处理了这个问题。如何在写入文件之前验证bytearray?我是否需要设置MIME类型或者其他东西..原谅稍微有点问题的小问题,一点点知识可能是一件危险的事情。
谢谢
--------------------------------------- PART II ------ ------------------------------------
这是一些代码 -
1)将图像加载到Flash播放器
item.load();
function _onImageDataLoaded(evt:Event):void {
var tmpFileRef:FileReference=FileReference(evt.target);
image_loader=new Loader ;
image_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onImageLoaded);
image_loader.loadBytes(tmpFileRef.data);
}
function _onImageLoaded(evt:Event):void {
bitmap=Bitmap(evt.target.content);
bitmap.smoothing=true;
if (bitmap.width>MAX_WIDTH||bitmap.height>MAX_HEIGHT) {
resizeBitmap(bitmap);
}
uploadResizedImage(bitmap);
}
function resizeBitmap(target:Bitmap):void {
if (target.height>target.width) {
target.width=MAX_WIDTH;
target.scaleY=target.scaleX;
} else if (target.width >= target.height) {
target.height=MAX_HEIGHT;
target.scaleX=target.scaleY;
}
}
function uploadResizedImage(target:Bitmap):void {
var _bmd:BitmapData=new BitmapData(target.width,target.height);
_bmd.draw(target, new Matrix(target.scaleX, 0, 0, target.scaleY));
var encoded_jpg:JPGEncoder=new JPGEncoder(90);
var jpg_binary:ByteArray=encoded_jpg.encode(_bmd);
_uploadService=new NetConnection();
_uploadService.objectEncoding=ObjectEncoding.AMF3
_uploadService.connect("http://.../amfphp/gateway.php");
_uploadService.call("UploadService.receiveByteArray",new Responder(success, error), jpg_binary, currentImageFilename);
}
非常感谢你的帮助
答案 0 :(得分:0)
你能检查一下bytearray的endian类型吗?也许它是默认为大端
答案 1 :(得分:0)
您的问题出在您的PHP服务中。在AMFPHP中,POST数据是抽象的,因此您在AMFPHP UploadService脚本中需要的是一个函数,它接受_uploadService.call --jpg_binary和currentImageFilename中的两个输入参数 - 如下所示:
<?php
class UploadService {
function receiveByteArray( $ba, $filename ) {
$result = file_put_contents($filename, $ba->data);
if ( $result == FALSE ) {
trigger_error( "File save failed" );
}
}
}
?>
答案 2 :(得分:0)
var dataToBeSent:ByteArray =jpgEncoder.encode(theBitmapData);
var url:String = "upload.php";
var urlReq:URLRequest = new URLRequest(url);
urlReq.data = dataToBeSent;
urlReq.method = URLRequestMethod.POST;
urlReq.contentType = "application/octet-stream";
var urlLoader:URLLoader = new URLLoader();
urlLoader.load(urlReq);
请介意 contentType行
PHP
$fp = fopen( $fname, "wb" );
fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] );
fclose( $fp );
对我而言,它完美无缺!
奥利弗