Нужно загрузить файл, и вместе с ним передать дополнительные параметры. Использую вот такой велосипед:

Код 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
В конце вопросы - это типа содержимое файла. После него ещё должна идти завершающая граница, но её нет. Если закомментировать запись содержимого файла в запрос, то эта граница появляется. Вообще хз, имеет это отношение к ошибке или нет.
Что я делаю не так?