Выбор правильного URL с помощью FileReference (AS3) для загрузки файла
Я схожу с ума в ване, пытаясь загрузить файлы с моего флэш-сайта на чужой жесткий диск. Я отмечаю одну или две аналогичные задачи на этом форуме, но они намного сложнее, чем мои. Файлы.mp3, и я не хочу конвертировать их в.zip. Поэтому я использовал FileReference. Казалось, работает хорошо. Но большая проблема - это URL, который мне нужно выбрать и написать в коде. Мой враг - непрекращающаяся дилемма:
A) (http://mysite.net/myfolder/myfile.mp3);
or B) (http://www.mysite.net/myfolder/myfile.mp3);
Потому что, если посетитель сайта не понимает, что его URL содержит (или нет) правильные символы ([triple "W"] или http://[triple "W"]), файл просто не будет загружен. Я не знаю, как "объединить" или связать оба префикса динамически, чтобы получить безошибочно хороший результат… Я мог бы установить две кнопки, но это крайне необычно… (Кстати, у меня была точно такая же проблема с анализом контактов, что ссылки php на флеш для рассылки). Пожалуйста, дайте мне руку! Заранее спасибо! Код является:
var myfileReference:FileReference = new FileReference();
var myRequest:URLRequest = new URLRequest("http://www.mysite.net/myfolder/myfile.mp3");
function downloadFile (event:MouseEvent):void {
myfileReference.download(myRequest);
}
download_btn.addEventListener(MouseEvent.CLICK, downloadFile);
2 ответа
Наконец-то я нашел решение этой проблемы в коде класса, который я здесь описал. Вам просто нужно добавить (в.fla) кнопку для каждого загружаемого файла, две одинаковые полосы (mc), чтобы указать прогресс ("mc_progress" и "mc_loaded") и текстовое поле, чтобы знать, что действие выполнено (txt_prog. текст). Вот и все. Вы можете найти все это здесь: http://dev.tutsplus.com/tutorials/quick-tip-download-files-through-swfs-using-filereference--active-9068
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.events.Event;
public class fileref extends Sprite
{
//Donload Buttons
public var btn_img_download : MovieClip,
btn_txt_download : MovieClip,
btn_mp3_download : MovieClip,
mc_loaded : MovieClip;
//Progress Bar
public var mc_progress : MovieClip,
txt_prog : TextField;
//Download links Array
private var Arr_Links : Array;
//Default Parent Path for Downloads
private var defaultPath : String = "files/";
//Filen Name
private var urlName : String;
//instance of FileReference() Class
private var fr : FileReference;
//url of the requested files
private var req : URLRequest;
public function fileref() : void
{
//Set buttonModes of the download buttons
btn_img_download.buttonMode = btn_txt_download.buttonMode = btn_mp3_download.buttonMode = true;
//Set width of the mc_loaded progress bar to 0
mc_loaded.scaleX = 0;
//Create list of files to be downloaded
Arr_Links = ["myimage.jpg","myaudio.mp3","mytext.rtf"];
req = new URLRequest();
fr = new FileReference();
//Download buttons Event Listeners
btn_img_download.addEventListener( MouseEvent.CLICK,downloadFile );
btn_mp3_download.addEventListener( MouseEvent.CLICK,downloadFile );
btn_txt_download.addEventListener( MouseEvent.CLICK,downloadFile );
fr.addEventListener( ProgressEvent.PROGRESS,progressHandler );
fr.addEventListener( Event.COMPLETE,completeHandler );
}
private function downloadFile( e : MouseEvent ) : void
{
//set the download path to the urlName variable according to clicked Download Button
switch (e.target.name)
{
case "btn_img_download":
urlName = Arr_Links[0];
break;
case "btn_mp3_download":
urlName = Arr_Links[1];
break;
case "btn_txt_download":
urlName = Arr_Links[2];
break;
}
//change text message "progress" to "downloading..." at txt_prog
txt_prog.text = "downloading...";
//Assign url to the req
req.url = defaultPath + urlName;
//Downlaod requested file
fr.download( req );
}
private function progressHandler( event : ProgressEvent ) : void
{
mc_loaded.scaleX = (event.bytesLoaded / event.bytesTotal) ;
}
private function completeHandler( event : Event ) : void
{
//reset progress bar after download is finished
mc_loaded.scaleX = 0;
txt_prog.text = "download finished";
}
}
}
Вы можете использовать класс LoaderInfo. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/LoaderInfo.html
Его экземпляр назначается каждому поэтапному объекту DisplayObject. Он содержит свойство loaderUrl, которое может помочь вам решить, какой URL использовать.