Возможно ли конвертировать файл в FileReference за кулисами? - PullRequest
2 голосов
/ 12 февраля 2012

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

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

Ответы [ 2 ]

1 голос
/ 20 марта 2012

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

Я нашел эту ссылку очень полезной: http://labs.findsubstance.com/2008/04/03/as3-upload-encode-images/

0 голосов
/ 12 февраля 2012

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

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

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

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

...