Flex: DeepCopy FileReference

в моем проекте я позволяю пользователям выбрать изображения с помощью класса FileReference. Я затем загружаю эти изображения в их .data свойства, с помощью загрузки () функция. После этого я выполняю некоторое локальное управление и отправляю их на сервер.

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

Проблема, после того как FileReference загружается впервые, я не могу разгрузить его всегда, и я не могу сохранить данные для всех изображений в памяти, потому что они огромны.

Таким образом, я предполагаю, что существует только одна вещь, которую я могу сделать, который выполняет DeepCopy на FileReference... Затем я мог загрузить первую версию, фрагментировать ее и использовать копию для второго 'выполнения'.

Я пытался использовать ObjectUtil.copy, но когда я получаю доступ, например, .name свойство копии, это перестало работать с:

Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.

в flash.net:: имя FileReference/get ()

соответствующий отрывок:

registerClassAlias("FileReference",FileReference);
masterFileList.addItem(FileReference(ObjectUtil.copy(fr_load.fileList[i])));
trace(masterFileList[i].name)

Действительно ли это верно, что существуют некоторые защищенные свойства класса FileReference, которые препятствуют тому, чтобы он был скопирован? Если это так, я могу обойти это так или иначе? Или есть ли какое-либо другое решение моей полной проблемы?

Я ценю любые подсказки/идеи!

6
задан supo 10 January 2010 в 22:37
поделиться

3 ответа

Вы не можете использовать objectutil.copy. Этот метод предназначен для копирования только объектов данных (VO классов).

Вы должны создать новую FileReference и скопируйте порпурты, один за другим. Создать функцию, чтобы сделать это ..

1
ответ дан 17 December 2019 в 07:05
поделиться

Были бы, копируя его во временный файл и затем загружая временную работу файла? Например

        var fileRef:FileReference = new FileReference();
        fileRef.browse();

        ......................

        var tmpFile:File =  File.createTempFile();
        try {
            var tmpFileStream:FileStream = new FileStream();
            tmpFileStream.open(tmpFile, FileMode.WRITE);
            trace("Opened file: " + tmpFile.nativePath);
            tmpFileStream.writeBytes(fileRef.data);
            trace("copied file");
        } catch ( error:Error ) {
            trace("Unable to open file " + tmpFile.nativePath + "\n");
            throw error;
        }
1
ответ дан 17 December 2019 в 07:05
поделиться

Я думаю, что операция полностью запрещена по веским. Если вы можете дублировать новый FileReference через код ActionScript, вы также сможете изготовить объект FileReeference через код ActionScript. Конечно, это будет довольно плохой дырой безопасности, если вы можете заставить загрузку произвольного файла.

Сохранение копии данных в памяти действительно не так плохая решения. В конце концов, это временно. Типичный клиентский компьютер должен иметь возможность управлять несколько сотен дополнительных MB данных без проблем. Это, безусловно, лучший вариант, чем наличие браузера два отдельных загрузки, что в конечном итоге ваше попытка будет выполняться.

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

1
ответ дан 17 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: