Передайте содержимое байтового массива в метод HTTP.Send в Adobe Air - PullRequest
0 голосов
/ 05 марта 2012

Я загружаю файл, используя метод Adobe Air HTTPService.Send, передавая байтовый массив содержимого файла, считанного с помощью FileReference. Когда я записываю набор байтов со стороны сервера (php), он записывает в файл детали байтового массива (buff) вместо содержимого файла, например "endian = bigEndian & position = 0 & bytesAvailable = 61127 & length = 61127 & objectEncoding = 3". Ниже я включил код того, как я читаю файл и отправляю его на сервер. В любом случае, я могу напрямую передать данные в байтовом массиве для отправки метода?

Файл Чтение

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);
}

1 Ответ

1 голос
/ 05 марта 2012

Попробуйте что-нибудь подобное.Вам нужно будет установить некоторые переменные.

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";}?>
...