как отправить массив байтов на сервер в flash builder (Flex 4)

У меня есть видеофайл в моей локальной системе. Я использую Windows XP в своей системе. Теперь я хочу отправить этот массив байтов видеофайла на сервер в Flash Builder (Flex 4). Я использую PHP на стороне сервера.

Как я могу это сделать? Пожалуйста, направляйте

Спасибо


person Vivek    schedule 24.03.2011    source источник


Ответы (5)


Socket.writeBytes() сделает то, что вам нужно.

person Community    schedule 24.03.2011

По этой ссылке: .

// serialization
var serializedSound:ByteArray;

serializedSound = serializeSound(sound);
serializedSound.position = 0;

// unserialization
var newSound:Sound = new Sound();
newSound.addEventListener(SampleDataEvent.SAMPLE_DATA, deserialize);
newSound.play();

function serializeSound(sound:Sound):ByteArray
{
var result:ByteArray = new ByteArray();

while( sound.extract(result, 8192) ){ 
result.position = result.length; 
}

return result;
}

function deserialize(e:SampleDataEvent):void
{
for ( var c:int=0; c<8192; c++ ) {
if(serializedSound.bytesAvailable < 2) break;
e.data.writeFloat(serializedSound.readFloat());
e.data.writeFloat(serializedSound.readFloat());
}
}
person Kevin Gallahan    schedule 24.03.2011

Вам нужно просто отправить массив байтов в PHP или также получить массив байтов?

Для отправки массива байтов вы можете использовать Zend_AMF: http://framework.zend.com/download/amf

Он будет обрабатывать все преобразования, и в php вы получите массив байтов в виде строки через переменную (я использую ссылку на переменную как: &$file, чтобы сэкономить память при вызове метода)

Вот фрагмент кода, который может вам помочь: Отправка ByteArray в Zend_Amf

Для получения ByteArray вы можете использовать FileReference метод load() для получения всего байтового массива локального файла.

person Daniel Guerrero    schedule 24.03.2011
comment
я хочу записать свой локальный системный видеофайл на сервер. что мне делать в flex 4, чтобы я мог это сделать. - person Vivek; 24.03.2011
comment
Я делаю это, как показано ниже: ‹fx:Declarations› ‹s:HTTPService id=httpServiceFeedback url=URL-адрес php-файла сервера fault=faultEvent(event) result=serverResponse(event) useProxy=false method=POST› ‹mx:request xmlns= › ‹username›{byteArray}‹/username› ‹/mx:request› ‹/s:HTTPService› ‹/fx:Declarations›, но когда я использую приведенный выше код, редактор flashbuilder показывает предупреждение, что привязка данных не сможет определить назначения в byteArray, где я делаю неправильно. Пожалуйста, направляйте. Спасибо - person Vivek; 24.03.2011

Вы знаете, что создание ByteArray видео во Flex буквально сохраняет это видео в памяти, верно? Любое большое или несжатое видео будет использовать огромный объем памяти на стороне клиента, что может привести к ошибкам, если Flash достигнет предела памяти.

Я не думаю, что ты подходишь к этому правильно. Вместо этого я рекомендую вам просто загрузить видео на сервер, который является сервером, а затем получить доступ к байтам внутри него. Если вы хотите загрузить видео на сервер, ознакомьтесь с этим руководством, в котором показано, как загрузить файл из Flex и PHP-скрипт для получения и сохранения файла: http://livedocs.adobe.com/flex/3/html/17_Сеть_и_коммуникации_7.html#118972

Отсюда PHP может получить доступ к байтам, если вы так склонны.

person J_A_X    schedule 24.03.2011

Код AS3:

uploadURL = new URLRequest();
uploadURL.url = "upload.php?fileName=videotrack";
uploadURL.contentType = 'application/octet-stream';
uploadURL.method = URLRequestMethod.POST;
uploadURL.data = rawBytes;
urlLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
urlLoader.load(uploadURL);

rawBytes — это массив байтов, который вы хотите загрузить на сервер.

PHP-код

$fileName = $_REQUEST['fileName'] . ".mp3";
$fp = fopen( $fileName, 'wb' );
fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] );
fclose( $fp );

Я использовал расширение .mp3, потому что мой байтовый массив был данными из mp3-файла, но вы можете установить расширение для любого типа файла, который представляет ваш байтовый массив.

person Mudasir Bhutto    schedule 02.04.2011