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

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

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

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам