Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.07.2009, 05:57
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 1  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Arrow Не получается залить файл на сервер

Нужно загрузить файл, и вместе с ним передать дополнительные параметры. Использую вот такой велосипед:
Код AS3:
public function executeAdvanced(method:String, fileName:String, fileData:ByteArray, params:Object, callback:Function):void{
 
	var boundary	:String	=	'---------------------------7d76d1b56035e';
 
	//Method
 
	var strMethod	:String;
 
	strMethod		=	'--' + boundary + '\r\n'
				+	'Content-Disposition: form-data; name="method"\r\n\r\n'
				+	method + '\r\n';
 
	//Params
 
	var strParams	:String	=	'';
 
	for(var i:String in params){
 
		if(i == 'method')continue;
 
		strParams		+=	'--' + boundary + '\r\n'
					+	'Content-Disposition: form-data; name="' + i + '"\r\n\r\n'
					+	params[i] + '\r\n';
 
	}//for
 
	//File
 
	var strFileHeader	:String;
 
	strFileHeader	=	'--' + boundary + '\r\n'
				+	'Content-Disposition: form-data; name="file"; filename="' + fileName + '"\r\n'
				+	'Content-Type: application/octet-stream\r\n\r\n';
 
	//End of request
 
	var strEnd			:String;
 
	strEnd			=	'--' + boundary + '--';
 
	//BYTES
 
	var methodBytes	:ByteArray	=	new ByteArray();				
	methodBytes.writeMultiByte(strMethod, "ascii");
 
	var paramsBytes		:ByteArray	=	new ByteArray();				
	paramsBytes.writeMultiByte(strParams, "ascii");
 
	var fileHeaderBytes	:ByteArray	=	new ByteArray();
	fileHeaderBytes.writeMultiByte(strFileHeader, "ascii");
 
	var endBytes		:ByteArray	=	new ByteArray();
	endBytes.writeMultiByte(strEnd, "ascii");
 
	//Compiling the request data
 
	var requestBytes	:ByteArray	=	new ByteArray();
 
	requestBytes.writeBytes(methodBytes,		0, methodBytes.length);
	requestBytes.writeBytes(paramsBytes,		0, paramsBytes.length);
	requestBytes.writeBytes(fileHeaderBytes,		0, fileHeaderBytes.length);
	requestBytes.writeBytes(fileData,			0, fileData.length);
	requestBytes.writeBytes(endBytes,		0, endBytes.length);
 
	trace(requestBytes.toString());
 
	trace(fileData.length);
	trace(fileData.toString());
 
	//Creating the request
 
	var request:URLRequest = new URLRequest(this.remoteAddress);
	request.data		=	requestBytes;
	request.method		=	URLRequestMethod.POST;
	request.contentType	=	"multipart/form-data; boundary=" + boundary;
 
	//Finally, sending all this shit to the server
 
	var loader:URLLoader		=	new URLLoader();
 
	this.callbacksHash[loader]	=	callback;
 
	loader.addEventListener(Event.COMPLETE,			this.responseHandler);
 
	loader.addEventListener(IOErrorEvent.IO_ERROR,			this.errorHandler);
	loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,	this.errorHandler);
 
	loader.load(request);
 
}//executeAdvanced
При этом на сервере получаю ошибку про то, что файл был получен частично.

Трейс запроса, который отправляется: http://paste.org.ru/?dhxj73
В конце вопросы - это типа содержимое файла. После него ещё должна идти завершающая граница, но её нет. Если закомментировать запись содержимого файла в запрос, то эта граница появляется. Вообще хз, имеет это отношение к ошибке или нет.

Что я делаю не так?
__________________
тонкий тролль, осеянный благодатью

Старый 06.07.2009, 11:17
RetKiller вне форума Посмотреть профиль Отправить личное сообщение для RetKiller Найти все сообщения от RetKiller
  № 2  
Ответить с цитированием
RetKiller

Регистрация: Dec 2007
Сообщений: 58
Отправить сообщение для RetKiller с помощью ICQ
Вот класс, работает как часы. Оригинальная версия тут. Во вложении немного измененная, с добавлением заголовка content-length к каждой части
Вложения
Тип файла: zip MultiPartUrlLoader.zip (4.3 Кб, 49 просмотров)

Старый 06.07.2009, 13:11
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 3  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Спасибо!
__________________
тонкий тролль, осеянный благодатью

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:53.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.