Можно ли за кулисами преобразовать файл в FileReference?

Казалось бы, FileReference.upload () - единственный способ, которым вы можете загрузить файл на сервер во Flash и получить обратную связь о его состоянии загрузки с помощью обратного вызова PROGRESS. Все остальные методы просто уходят в эфир и возвращаются, когда загрузка файла завершена.

К сожалению, FileReference, похоже, настаивает на том, чтобы пользователь выбрал файл для загрузки. Похоже, что не существует механизма, с помощью которого можно было бы установить файл с помощью кода. Причина, по которой мне это нужно, заключается в том, что я разрешаю пользователю загружать массивные файлы и загружаю их кусками, поэтому я хочу просто упаковать фрагмент данных в FileReference (может быть 5 или 10 мегабайт) и отправить его и смотри. Есть ли у кого-нибудь мысли, можно ли вручную загрузить данные в объект FileReference? К сожалению, свойство data доступно только для чтения. К любым советам по этому поводу будем относиться с добротой :)


person Yevgeny Simkin    schedule 12.02.2012    source источник


Ответы (2)


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

Мне очень пригодилась эта ссылка: http://labs.findsubstance.com/2008/04/03/as3-upload-encode-images/

person Michael Bedar    schedule 19.03.2012

Да, это невозможно, это мера безопасности. Т.е. вы не должны иметь возможность отправлять случайные файлы с ПК пользователя, если пользователи явно не выберут их для отправки.

Однако вы можете отслеживать загрузку, если спроектируете ее иначе. Например, вы можете использовать URLStream, Socket или NetConnection для отправки любых данных, которые вам нужны, и для настройки сервера, чтобы он отвечал нужным вам способом. Например, URLStream предоставляет поток чтения / записи, который можно использовать как для отправки, так и для получения данных. Затем вы можете использовать его с каким-то буфером: отправить содержимое буфера, подождать, пока сервер подтвердит получение данных, пополнить буфер, повторить.

РЕДАКТИРОВАТЬ: Итак, я предполагаю, что мы говорим о приложении AIR (раз уж вы упомянули файл)? Итак, вы, вероятно, открываете файл с помощью FileStream и хотите отправить только что полученный фрагмент данных с помощью FileReference.upload () - это правильно? Что ж, тогда кажется, что FileReference не может сделать это тихо. Тем не менее, я бы использовал URLStream, чтобы разделить большой кусок данных, который вы хотите загрузить, скажем, на 100 частей, а затем отправить каждую часть после получения OK от сценария сервера, настроенного для его приема. Обычно загрузка файла обрабатывается непосредственно HTTP-сервером, но в вашем случае потребуется некоторая дополнительная работа, а именно запуск сценария, который будет согласовывать размер «пакета», получать пакеты и подтверждать прием. Это может быть менее тривиально для серверных скриптов, у которых может истечь время ожидания, но, безусловно, должно быть решение для этого.

В качестве альтернативы вы можете настроить свой HTTP-сервер для обслуживания политики сокетов после того, как он получит запрос политики сокетов, после чего вы можете подключиться к Socket и просто скопировать запрос типа multipart-form-data, обычно отправляемый через FileReference или аналогичный элемент управления HTML. (Я бы, вероятно, выбрал этот способ, если бы это не был общий хостинг или что-то еще, что помешало бы мне настроить сервер).

person Community    schedule 12.02.2012
comment
URLStream нельзя использовать для отслеживания прогресса загрузки буфера. Я уже делаю то, что вы описываете, но загрузка буфера - это черный ящик. Я подумал, что, поскольку они предлагают именно ту функциональность, которую я хочу как часть FileReference, я хотел бы использовать ее для загрузки ДРУГОГО, чем файл, на который ссылается. Похоже на странный способ сломать их функциональность. - person Yevgeny Simkin; 12.02.2012