我使用adobe air HTTPService.Send方法上传文件,方法是传递使用FileReference读取的文件内容的字节数组。当我从服务器端(php)写入字节集时,它将字节数组(buff)的详细信息写入文件,而不是像文件的内容一样 “endian = bigEndian& position = 0& bytesAvailable = 61127& length = 61127& objectEncoding = 3”。下面我已经包含了如何读取文件并将其发送到服务器的代码。无论如何我可以直接将字节数组中的数据传递给send方法吗?
文件阅读
var buff:ByteArray = new ByteArray();
var localFilePath:String = "/Videos/sample.txt";
var uploadedFile:File = new File(localFilePath);
var uploadedFileStream:FileStream = new FileStream();
uploadedFileStream.open(uploadedFile,FileMode.READ);
uploadedFileStream.readBytes(buff);
uploadedFileStream.close();
文件上传
var serverPath:String = "http://myurl.com/rests";
var service:mx.rpc.http.mxml.HTTPService=new mx.rpc.http.mxml.HTTPService();
service.url=serverPath;
service.requestTimeout=30;
service.method="POST";
service.contentType="application/x-www-form-urlencoded";
service.addEventListener(ResultEvent.RESULT,onResponceReceive);
service.addEventListener(FaultEvent.FAULT,onResponceFail);
var userName:String="myusername";
var password:String="mypwd";
var encoder:Base64Encoder = new Base64Encoder();
encoder.insertNewLines=false;
encoder.encode(userName+":"+password);
service.headers={Authorization:"Basic "+encoder.toString()};
try{
service.send(buff);
}catch(error:Error){
Alert.show(error.message);
}
答案 0 :(得分:1)
尝试这样的事情。您需要设置一些变量。
private function uploadLogo():void {
logof = File.documentsDirectory.resolvePath ("logo.jpg");
ba = new ByteArray();
stream = new FileStream();
stream.open(logof, FileMode.READ);
stream.readBytes(ba);
stream.close();
urlLoaderSend = new URLLoader();
urlLoaderSend.dataFormat = URLLoaderDataFormat.TEXT;
urlLoaderSend.addEventListener(Event.COMPLETE, uploadImage, false, 0, true);
var urlRqSend:URLRequest = new URLRequest("http://www.domain.com/uploadImage.php");
urlRqSend.contentType = "application/octet-stream";
urlRqSend.method = URLRequestMethod.POST;
urlRqSend.data = ba;
urlLoaderSend.load(urlRqSend);
}
private function uploadImage(ev:Event):void {
trace("serverresponse "+ev.target.data);
try {
ba = null;
stream = null;
urlRqSend = null;
urlLoaderSend.removeEventListener(Event.COMPLETE, uploadImage);
urlLoaderSend = null;
} catch (e:Error) {
}
和PHP
<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
$imagename = "image.jpg";
$fp = fopen( "images/$imagename", 'wb' );
fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] );
fclose( $fp );
echo "OK";}
else { echo "NoImageSent";}?>