Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не получается залить файл на сервер (http://www.flasher.ru/forum/showthread.php?t=127119)

Gaen 06.07.2009 05:57

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

Что я делаю не так?

RetKiller 06.07.2009 11:17

Вложений: 1
Вот класс, работает как часы. Оригинальная версия тут. Во вложении немного измененная, с добавлением заголовка content-length к каждой части

Gaen 06.07.2009 13:11

Спасибо!


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

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