Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.03.2012, 19:23
Кандидат Javascript-наук
Отправить личное сообщение для elf2002 Посмотреть профиль Найти все сообщения от elf2002
 
Регистрация: 30.12.2011
Сообщений: 114

Flash -> post файлов. Аналогия php-шному fsockopen ???
Нужен метод отправки файла посредством flash.
URLRequest дает решение, но дело в том, что для отправки этим методом нужен уже готовый файл.
В моем случае файл большой и хотелось бы его отправлять еще в момент его создания, т.е. на лету.
В php с этим бы не было проблем, а вот flash -
__________________
без шуток
Ответить с цитированием
  #2 (permalink)  
Старый 14.03.2012, 19:41
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

Так а что у вас на руках есть? Кусок файла? Поток?
Почему не дождаться окончания формирования файла?
И сокеты в флеше есть. http://help.adobe.com/ru_RU/ActionSc...rogramming.pdf
оф. ман по ActionScript, про сокеты там есть.

Последний раз редактировалось Rootpassword, 14.03.2012 в 19:50.
Ответить с цитированием
  #3 (permalink)  
Старый 14.03.2012, 20:01
Кандидат Javascript-наук
Отправить личное сообщение для elf2002 Посмотреть профиль Найти все сообщения от elf2002
 
Регистрация: 30.12.2011
Сообщений: 114

Спасибо.
Пороюсь по сокетам.
А файл берется с локалки через реф, и шифруется перед отправкой. Файлы бывают до гига, соответственно, дождаться пока такой зашифруется, а потом отправится, почти нереально. =)
Надо полюбому шифровать-отправлять шматками.
__________________
без шуток
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2012, 20:04
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

Если у вас размер виден - режьте кусками по мегабайту и отправляйте поштучно, на сервере сливайте в один. Или сокеты.
Ответить с цитированием
  #5 (permalink)  
Старый 14.03.2012, 20:26
Кандидат Javascript-наук
Отправить личное сообщение для elf2002 Посмотреть профиль Найти все сообщения от elf2002
 
Регистрация: 30.12.2011
Сообщений: 114

Сообщение от Rootpassword Посмотреть сообщение
Если у вас размер виден - режьте кусками по мегабайту и отправляйте поштучно, на сервере сливайте в один. Или сокеты.
поштучно - это значит нагрузить процессор, чего не хочется делать.
Задача нагрузить клиентский комп, но сервер пожалеть. =)

Вот что нашол по сокетам.

http://help.adobe.com/ru_RU/FlashPla...xamplesSummary

там довольно скромный пример работы, но так как познания в этом очень слабые, то маловато будет.
Если не смогу разрулить сам, то может кто поможет?
__________________
без шуток
Ответить с цитированием
  #6 (permalink)  
Старый 14.03.2012, 22:16
Кандидат Javascript-наук
Отправить личное сообщение для elf2002 Посмотреть профиль Найти все сообщения от elf2002
 
Регистрация: 30.12.2011
Сообщений: 114

К сожалению, найти в сети живой пример отправки файла через сокеты не получилось =(
__________________
без шуток
Ответить с цитированием
  #7 (permalink)  
Старый 15.03.2012, 03:18
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от elf2002
К сожалению, найти в сети живой пример отправки файла через сокеты не получилось =(
Зачем тут сокеты? Отправить данные из флеша и без сокетов можно. Таким же образом что отправка файлов, только отправлять не файлы а накопленный буфер.

package com.net {

	/*
	* author: devote
	*/
	
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLVariables;
	import flash.net.URLRequestMethod;
	import flash.net.URLRequestHeader;
	import flash.utils.ByteArray;
	import flash.events.ProgressEvent;
	
	public class MultipartSender extends URLLoader {
		
		private var multiPartFields: ByteArray;
		private var _params: * ;
		private var _variables: URLVariables;
		
		public function MultipartSender(): void {
			super();
			multiPartFields = new ByteArray();
			_variables = new URLVariables();
		}
		
		public function addMultipartField( sName: String, sValue: * ): void {
			_variables[ sName ] = sValue;
		}
		
		public function addMultipartFile( sName: String, sFileName: String, data: ByteArray ): void {
			_variables[ sName + "[filename]" ] = sFileName;
			_variables[ sName + "[filesize]" ] = data.length;
			multiPartFields.writeBytes( data );
		}
		
		public function Send( url: String ): Boolean {
			var AcceptHeader: URLRequestHeader = new URLRequestHeader( "Accept", "*/*" );
			
			var request: URLRequest = new URLRequest( url );
			request.requestHeaders.push( AcceptHeader );
			
			request.method = URLRequestMethod.POST;
			//trace(_variables.toString());
			
			if ( multiPartFields.length > 0 ) {
				request.url = url + "?" + _variables.toString();
				request.data = multiPartFields;
			} else {
				request.data = _variables;
			}
			
			//addEventListener(ProgressEvent.PROGRESS, function(e: ProgressEvent): void {
			//	e.
			//});

			var result: Boolean = false;
			
			try {
				this.load( request );
				result = true;
			} catch( error: Error ) {
				trace( "Unable to load requested document." );
			}
			
			multiPartFields.clear();
			_variables = new URLVariables();
			return result;
		}
		
		public function set params( value: * ): void {
			_params = value;
		}
		
		public function get params(): * {
			return _params;
		}
	}
}


Использовать примерно так:

ms = new MultipartSender();

ms.addEventListener(Event.COMPLETE, function(e: Event): void {
    trace("complete");
    trace(e.currentTarget.data.toString());
});

ms.addEventListener(ProgressEvent.PROGRESS, function(e: ProgressEvent): void {
    trace(e.bytesLoaded, e.bytesTotal);
});
					
ms.addEventListener(IOErrorEvent.NETWORK_ERROR, function(e: IOErrorEvent): void {
    trace(e.currentTarget.data);
    trace("error");
});
					
ms.addMultipartFile( "testnamefield", "file.jpg", Buffer );
ms.addMultipartField( "test", "val" );
ms.Send("http://somesite.com/test.php");
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 15.03.2012, 04:57
Кандидат Javascript-наук
Отправить личное сообщение для elf2002 Посмотреть профиль Найти все сообщения от elf2002
 
Регистрация: 30.12.2011
Сообщений: 114

Цитата:
ms.addMultipartFile( "testnamefield", "file.jpg", Buffer );
ms.addMultipartField( "test", "val" );
ms.Send("http://somesite.com/test.php");
т.е. оно сначала собирает данные, и только после сбора отправляет?
Увы, не то.
Здесь задача сложнее: брать куски, зашифровывать, и отравлять.
Пока что реализовал как Rootpassword сказал, т.е. кусками, но это не то и замедляет, т.к. надо проверять, отправился ли очередной кусок, потому что если не проверять, то куски путаются.
__________________
без шуток
Ответить с цитированием
  #9 (permalink)  
Старый 15.03.2012, 21:06
Кандидат Javascript-наук
Отправить личное сообщение для elf2002 Посмотреть профиль Найти все сообщения от elf2002
 
Регистрация: 30.12.2011
Сообщений: 114

Если кто может сделать на флещь аплоад динамического файла на сервер (т.е. не зная заранее длины файла, потому что тот формируется программно), то сообщите. Может договоримся. =)
__________________
без шуток
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск