Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Во flash-сайт с прелоадером не грузятся картинки (http://www.flasher.ru/forum/showthread.php?t=134584)

whitecrane 06.01.2010 12:27

Доброго дня! Вчера промучался с попытками заставить загружаться картинки и видео на сайт, который в свою очередь загружается внешним прелоадером. Постой пример получается, а в случае сайта нет. Не знаю почему... Решил по-другому - сделать прелоадер внутри сайта, на первом фрейме. Наприсал так:
Код AS1/AS2:

stop()
 
this.createTextField("txt", this.getNextHighestDepth(), 0, 0, 100, 100);
this.txt.autoSize = true;
var format:TextFormat = new TextFormat();
format.color = 0xFF6600;
format.font = "verdana";
format.size = 20;
onEnterFrame = TextFieldEvent;
function TextFieldEvent(){
        total = getBytesTotal();
        loaded = getBytesLoaded();
        this.txt.text = Math.floor((loaded/total)*100)+"%";
        if (loaded == total){
                this.txt.text = "";
                        delete onEnterFrame;
                        this.txt.removeTextField();
                        gotoAndStop(2)
                }
        }
        this.txt.setTextFormat(format);
        this.txt._x = Stage.width/2-this.txt._width/2;
        this.txt._y = Stage.height/2-this.txt._height/2;

Вроде, должен работать, но на моем компе все происходит очень быстро. Как сделать так, чтобы как бы имитировать скорость загрузки в нете, скажем, при 128кб/c, 256...? Чтобы знать наверняка, работает ли.

Добавлено через 6 минут
И еще.... Надеюсь, меня не забанят за мааленький вопрос, за рамками темы, но в рамках моего сайта, который в стадии добития и доведения.
У меня есть кнопка, при нажатии на которую должен загружаться и сохраняться на компе видеофайл. Как мне грамотно это сделать, чтобы открывалось виндовое окно - открыть, загрузить, отмена.... ? Гетурлом, или чем-то другим?
Заранее спасибо.

Zik. 06.01.2010 13:16

Цитата:

Как мне грамотно это сделать, чтобы открывалось виндовое окно - открыть, загрузить, отмена.... ? Гетурлом, или чем-то другим?
Насколько мне известно, в AS 1.0/2.0 никак, только в третьем

А насчет
Цитата:

как бы имитировать скорость загрузки в нете, скажем, при 128кб/c, 256...? Чтобы знать наверняка, работает ли.
Думаю, можно включить торрент

alexcon314 06.01.2010 14:16

Если вы работаете во Flash IDE (Macromedia Flash 8 Pro, к примеру), можно симулировать загрузку из инета на разных скоростях, дабы полюбоваться прогрссом прелоадера, не выгружая все на сервер.
Ctrl+Enter->[окно плеера]->View->DownloadSettings->[выбираете нужное], закрываете окно и еще раз Ctrl+Enter. Включится выбранная скорость симуляции загрузки.
Цитата:

Гетурлом, или чем-то другим?
Гетурлом не выходит что ли?

whitecrane 06.01.2010 14:42

Спасибо, спасибо, нашел способ эмуляции, все работает.

Гетурл срабатывает, но открывает окно браузера, и проигрывает мой мпег.
Код AS1/AS2:

on (release) {
        getURL("MZ_demoreel.mpg");
}

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

Добавлено через 1 минуту
Да, а если попытаться в as3 это сделать, мой проект в as2 перестанет работать?

alexcon314 06.01.2010 15:10

Ну, собственно, расширение .mpg понуждает браузер играть файл. Из ас это не поправить.
Что касается ас3, то это как бы совсем другая история. Боюсь, что ваш проект придется переписать весь с нуля, судя по вашему коду.
Код:

on (release) {
        getURL("MZ_demoreel.mpg");
}

это даже не ас2.

mooncar 06.01.2010 16:17

Цитата:

Сообщение от whitecrane (Сообщение 877126)
А мне не совсем это надо. Хотелось бы установить скачивание данного файла на комп того, кто захочет, а не проигрыш его прамо в нете...

Я делал такое с помощью заголовков HTML (headers), например, чтобы принудить браузер вызвать меню "сохранить-открыть", когда кликаешь по ссылке на картинку, а не открытие картинки в том же окне.
Думаю, что вам нужно сделать также, прописать правильные заголовки.
Если этой инфы мало и вопрос серьезный, то могу посмотреть детали, сейчас уже не упомню всех нюансов (вопрос возникал один раз). Но точно знаю, что браузер можно заставить делать все что угодно в этом плане с помощью HEADERS.

mr_pol 06.01.2010 16:32

А архивировать видос не пробовали?

mooncar 06.01.2010 16:56

Не надо ничего архивировать.
Автор, вот посмотрите, может быть вам мой пример поможет.

Делал я его по другому случаю (о контекстном меню шла речь), но очень рядом с вашей темой.
http://www.us-pro.ru/mooncar/context...ntexMenu2.html
Тут на картинке нужно кликнуть правой кнопкой, и появится контекстное меню флеша.

Вот ее код, привожу для ознакомления, тут вам только маленький кусоче нужен:
Код AS1/AS2:

var picURL:String = 'pic1.jpg';
 
//грузим картинку
var cont:MovieClip = this.createEmptyMovieClip('cont_mc', this.getNextHighestDepth()); //контейнер для картинки
this.onLoadInit = function(target:MovieClip) { //слушатель - сам _level0
        target.picURL = picURL; //запоминаем URL карнтинки внутри ее контейнера
        target.menu = menu_cm; //назначаем картинке меню
}
var loader:MovieClipLoader = new MovieClipLoader()
loader.addListener(this);
loader.loadClip(picURL, cont);
 
 
function doSave(mc:Object):Void { //предлагаем сохранить
        getURL('forcesave.php?picurl=' + mc.picURL + '&r=' + Math.random(), '_self');
}
 
//"общее" меню, днйствия нужны только для скрытия системных пунктов
var cmMain:ContextMenu = new ContextMenu();
cmMain.hideBuiltInItems();
this.menu = cmMain;
 
//определяем язык операционной системы на компе пользователя
var lang:String = System.capabilities.language;
var textForItemMenu:String ; //текст для пункта меню
switch (lang) {
        case 'ru':
                textForItemMenu        = 'Сохранить изображение как...';
        break ;
        case 'en':
                textForItemMenu        = 'Save image as...';
        break ;
}
 
//формируем меню для мувика
var menu_cm:ContextMenu = new ContextMenu();
menu_cm.hideBuiltInItems();
menu_cm.customItems.push(new ContextMenuItem(textForItemMenu, doSave));

Это я привел к сведению, вам тут все не нужно


А вот теперь внимательно смотрите. Вот кусок кода, который непосредственно вызывает скачивание файла:

Код AS1/AS2:

function doSave(mc:Object):Void { //предлагаем сохранить
        getURL('forcesave.php?picurl=' + mc.picURL + '&r=' + Math.random(), '_self');
}

По сути ничего сложного, просто скрипту при вызове передается URL картинки (pic1.jpg).

А теперь самое-самое главное - код самого php-скрипта. В нем мы форсируем вызов меню "Сохранить", и браузер не открывает картинку в своем окне, а думает, что это неизвестный ему attachment.
PHP код:

<?php
$picurl 
= $_GET['picurl'];
header("Content-type: application/applefile"); 
header("Content-Disposition: attachment; filename=$picurl");
?>

В результате, как уже было сказано, мы при клике правой кнопкой на картинке, котрая во флеше сидит, вызываем контекстное меню, и при выборе пункта "Сохранить как..." появляется меню "Сохранить-Открыть".
Думаю, что для видео можно сделать то же самое, при этом функцию getURL вызывать, конечно, напрямую, как вам нужно, а не через контекстное меню.

whitecrane 06.01.2010 17:12

Когда я его зазиповал, то по клику соответственно winrar открылся :)

А вот за идею, и пример решения - большое спасибо. Вечером поэкперементирую, может, и добьюсь результата.

вообще, я не ожидал, что столько людей мне будут помогать. Всем очень благодарен. :drinks:

mooncar 06.01.2010 17:15

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


Часовой пояс GMT +4, время: 16:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.