PDA

Просмотр полной версии : FileReference и скачивание файла


denis_ka
08.10.2008, 13:30
Доброго времени суток!

При скачивании файла открывается диалоговое окно с вопросом куда сохранить файл. После выбора папки и нажатия кнопки "Сохранить" файл не сохраняется. Но после того как файл был открыт непосредственно через браузер по прямой ссылке и при повторном скачивание файла через диалоговое окно происходит скачивание файла на локальный ПК.

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

Почему такое может происходить и можно ли это как-то решить?

Спасибо.

Wolsh
08.10.2008, 14:27
Ну а код выложим?)))) Или будем гадать на кофейной гуще? Причины разные могут быть. Например, не создан экземпляр файлРеференс через new, или он занят другим соединением. Или с политикой безопасности чтото не так. Или с путем.

denis_ka
08.10.2008, 14:49
Пожалуйста!

import flash.net.FileReference;

var listener:Object = new Object();

listener.onSelect = function(file:FileReference):Void {
trace("onSelect: " + file.name);
trace("size: " + file.size + " bytes");

}

listener.onCancel = function(file:FileReference):Void {
trace("onCancel");
}

listener.onOpen = function(file:FileReference):Void {
trace("onOpen: " + file.name);
}

listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {
trace("onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal);
}

listener.onComplete = function(file:FileReference):Void {
trace("onComplete: " + file.name);
}

listener.onIOError = function(file:FileReference):Void {
trace("onIOError: " + file.name);
}

var fileRef:FileReference = new FileReference();
fileRef.addListener(listener);
var url:String = "http://domain.com/path/file.mov";
var url_name = get_file_name(url);
trace ("saving file from: " + url + " filename: " + url_name);
if(!fileRef.download(url, url_name)) {
trace("dialog box failed to open.");
}

Wolsh
08.10.2008, 16:19
get_file_name(url) поподробнее

denis_ka
08.10.2008, 17:36
get_file_name(url) поподробнее

get_file_name - это функция, которая возвращает имя файла из заданной строки. Т.е. из URL http://domain.com/path/file.mov функция `get_file_name` вернёт `file.mov`. Ведь именно переменная `url_name` выводится в строке "Имя файла:" в диалоговом окне. Верно?

Я не специалист по Flash и писал Flash-приложение не я. Но пытаемся разобраться почему не происходит сохранение

Wolsh
08.10.2008, 18:41
Думаю дело в безопасности (код из хелпа, не придерешься)))
Надо прописать домен(ы - с www тоже) в разрешенные.
Ну и, надеюсь Вы смотрите тестовую флэшку не с локального диска)))

denis_ka
09.10.2008, 09:00
Добавление домена(-ов) в разрешённые не помогло, да и как заставить каждого пользователя добавлять домены

Flash-приложение смотрю на хостинге.

Ну что ж, будем использовать getURL()

Wolsh, спасибо большое за помощь :)

Wolsh
09.10.2008, 10:04
Да нет, ну зачем же) Это работает, буквально неделю назад делал проект и использовал даунлоад с файлреференс.
А что значит "каждого пользователя"? Речь о коде во флэшке. Или у Вас флэшка на одном домене качает с разных других???
System.security.allowDomain("http://domain.com (http://domain.com/path/file.mov)");
System.security.allowDomain("http://www.domain.com (http://domain.com/path/file.mov)");

denis_ka
09.10.2008, 14:53
А-а-а, понятно! Я думал, что рёчь идёт о браузере. Теперь понятно. Попробуем ...

denis_ka
10.10.2008, 09:05
А не подскажите куда именно вставить эти строчки? До объявления экземпляра объекта Object() ?

Wolsh
10.10.2008, 09:59
В самом начале основного кода. Т.е. это как бы настройки всего ролика.

denis_ka
15.10.2008, 14:13
Добрый день!

В самом начале основного кода. Т.е. это как бы настройки всего ролика.

:( Добавили System.security.allowDomain("http://domain.com");
System.security.allowDomain("http://www.domain.com"); в самое начало и ничего не изменилось.

А может играть роли расширение файла и/или его размер?

Wolsh
15.10.2008, 15:10
Размер - да, до 100 мб)
Расширение... Я, честно сказать, не знаю, что будет если в htaccess прописано открывание .mov ассоциированным плеером. Но у Вас ведь не открывается?)))
Да, еще по поводу вашей функции, возвращающей имя файла. Дело в том, что этот второй параметр - filename - вообще не обязателен. Если его не указывать, то файл будет назван в окне диалога сейв своим собственным именем автоматически)))

denis_ka
15.10.2008, 16:14
1. Размер файлов до 100 Мб
2. При открытии *.mov файлов, напрямую через строку браузера, файл ассоциируется стандартным плеером. Другим словами, открывается.

Но у Вас ведь не открывается? Простите, но что Вы хотили этим сказать?

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

Wolsh
16.10.2008, 11:42
Хотел сказать, что при использовании fileReference у Вас файл и в плеере не открывается)
Вы простите, denis_ka, но мне больше нечего Вам сказать. У меня при соблюдении всех перечисленных правил - работает. Можете посмотреть на http://niko-story.ru (надо выбрать раздел "примерь образ" и следовать инструкциям, т.е. загрузить фотку, подвигать элементы рамки и нажать "готово", дождаться диалога сохранения и сохранить. Что там происходит - Ваша фотка отправляется на сервер (upload), там если надо подгоняются размеры и флэшка забирает ее в себя))) Вы редактируете и сохраняете результат на сервер, где он записывается в файл .jpg и запускается процесс download обратно на компьютер пользователя. Вот такой АС2))))

denis_ka
29.10.2008, 15:15
Спасибо большое ещё раз за помощь Wolsh.

Решили использовать getURL(), т.к. ничего не помогает. То что это должно работать я не сомневаюсь, просто в данном конкретном случае не хочет. :)