ошибка при попытке загрузить динамически нарисованное изображение из Flex в Rails 3 с многокомпонентным содержимым формы - PullRequest
0 голосов
/ 01 июля 2011

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

NoMethodError (неопределенный метод `rewind 'для #):

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

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

Вот мой код:

public static function sendPic(simplePaint : SimplePaint) : void {
        var jpgSource:BitmapData = new BitmapData (simplePaint.width, simplePaint.height);
        jpgSource.draw(simplePaint);

        var jpgEncoder:JPEGEncoder = new JPEGEncoder(85);
        var ba:ByteArray = jpgEncoder.encode(jpgSource);

        var request:URLRequest = new URLRequest("../drawings");
        request.method = URLRequestMethod.POST;
        var boundary : String = "----------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7";
        request.contentType = "multipart/form-data; boundary=" + boundary;
        request.data = getMultiPartRequestData(boundary, 'drawing', 'mypic.jpg', ba);


        var urlLoader:URLLoader = new URLLoader();
        urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
        urlLoader.load(request);
    }

    private static function getMultiPartRequestData(boundary:String,
                                             resourceName:String,
                                             filename:String,
                                             bytes:ByteArray):ByteArray {
        //Alert.show("haha");
        var lf:String = "\r\n";

        var part1:String = '--' + boundary + lf + 
            'Content-Disposition: form-data; name="Filename"' + lf + lf +
            '{0}' + lf + 
            '--' + boundary + lf ;
        part1 += 'Content-Disposition: form-data; name="commit"' + lf + lf +  
                 'Create' + lf + 
                 '--' + boundary + lf +                      
                 'Content-Disposition: form-data; name="{1}[pic] ";' +  
                 'filename="{0}"' + lf +                         
                 'Content-Type: application/octet-stream' + lf + lf     

        var part2:String = '--' + boundary + lf + 
                           'Content-Disposition: form-data; name="Upload"' + lf + lf +
                           'Submit Query' + lf +
                           '--' + boundary + '--'

        var result:ByteArray = new ByteArray();
        // Filling in the parameters as per comment above
        result.writeMultiByte(StringUtil.substitute(part1, 
                                                    filename,
                                                    resourceName), "ascii");
        result.writeBytes(bytes,0,bytes.length);
        result.writeMultiByte(part2, "ascii");
        return result;
    }

1 Ответ

0 голосов
/ 06 июля 2011

Ответ был в ответе на ранее связанный вопрос.Я только что пропустил или отменил это в своем копировании-вставке-редактировании этого ответа.

Код, который необходимо изменить, состоит в следующем:

'Content-Disposition: form-data; name="{1}[pic] ";' +  
                 'filename="{0}"' + lf +                         
                 'Content-Type: application/octet-stream' + lf + lf 

он должен бытьизменено на:

'Content-Disposition: form-data; name="{1}[pic]"; ' +  // space moved here
                 'filename="{0}"' + lf +                         
                 'Content-Type: application/octet-stream' + lf + lf   

При перемещении пробела на точку с запятой оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...