• 07-08-2012, 10:22:50
    #1
    İyi günler kolay gelsin herkese.
    İşyerinde yeni bir proje verdiler bilgim olmamasına rağmen öğren dediler.
    İyi kötü yaptım bişeyler. Xml den veriyi çektim.
    Program cd den çalışacağı için internet gerektirmeyecek.
    Ancak kullanıcı isterse güncelle butonuna basarak güncelleyebilecek.

    Sorum şu: AS3 ile internetteki bir xml dosyasını herhangi bir yere nasıl kaydederiz.
  • 07-08-2012, 12:48:09
    #2
    var request:URLRequest;
    var localRef:FileReference;

    function xml_dl():void
    {
    request = new URLRequest("http://www.orneksite.com/xml.xml");
    localRef = new FileReference();

    try
    {
    localRef.download(request);
    }
    catch (error:Error)
    {
    trace("Dosyayı indirirken hata oluştu");
    }
    }






    bu kod işini görecektir. Senin için hazır kodun gerekli kısımlarını düzenledim. Anlamakta zorlanırsan commentte atarım haber vermen yeterli.
  • 07-08-2012, 13:33:25
    #3
    Kvasir adlı üyeden alıntı: mesajı görüntüle
    var request:URLRequest;
    var localRef:FileReference;
    function xml_dl():void
    {
    request = new URLRequest("http://www.orneksite.com/xml.xml");
    localRef = new FileReference();
    try
    {
    localRef.download(request);
    }
    catch (error:Error)
    {
    trace("Dosyayı indirirken hata oluştu");
    }
    }
    bu kod işini görecektir. Senin için hazır kodun gerekli kısımlarını düzenledim. Anlamakta zorlanırsan commentte atarım haber vermen yeterli.
    Hocam bunu anlıyorum çok teşekkür ederim kod için. Ama kullanıcıya kaydet ekranını göstermemem lazım. Ama sanırsam bu istediğim de flash güvenliği nedeniyle olmuyor.
    SharedObject ile xml kaydetmek mümkün mü acaba?
  • 07-08-2012, 13:42:19
    #4
    var ba:ByteArray = new ByteArray;
    ba.writeUTFBytes( myXML );
    ba.compress();
    try
    {
    ba.uncompress();
    }
    catch ( e:Error )
    {
    trace( "ByteArray sıkıştırılmamış" );
    }
    // bytearray'i xmle yaz
    myXML = XML( ba );
    bu çözüme stackoverflowda rastladım işinizi görecektir. Dediğin gibi sharedobject ile dialog sorunu çözülmüş. Fakat xml dosyası 100 KB aştığında yine dialog çıkacağı için sıkıştırma yapmayı denedik.
  • 07-08-2012, 14:01:38
    #5
    Kvasir adlı üyeden alıntı: mesajı görüntüle
    var ba:ByteArray = new ByteArray;
    ba.writeUTFBytes( myXML );
    ba.compress();
    try
    {
    ba.uncompress();
    }
    catch ( e:Error )
    {
    trace( "ByteArray sıkıştırılmamış" );
    }
    // bytearray'i xmle yaz
    myXML = XML( ba );
    bu çözüme stackoverflowda rastladım işinizi görecektir. Dediğin gibi sharedobject ile dialog sorunu çözülmüş. Fakat xml dosyası 100 KB aştığında yine dialog çıkacağı için sıkıştırma yapmayı denedik.
    Hmm bizim dosya 1,5 mb her türlü sorun olacağa benziyor.
  • 08-08-2012, 09:34:39
    #6
    Kvasir adlı üyeden alıntı: mesajı görüntüle
    var ba:ByteArray = new ByteArray;
    ba.writeUTFBytes( myXML );
    ba.compress();
    try
    {
    ba.uncompress();
    }
    catch ( e:Error )
    {
    trace( "ByteArray sıkıştırılmamış" );
    }
    // bytearray'i xmle yaz
    myXML = XML( ba );
    bu çözüme stackoverflowda rastladım işinizi görecektir. Dediğin gibi sharedobject ile dialog sorunu çözülmüş. Fakat xml dosyası 100 KB aştığında yine dialog çıkacağı için sıkıştırma yapmayı denedik.
    Hocam istediğim şekilde olmayınca FileReference ile işimi hallettim. Kullanıcı kendisi seçiyor ancak şöyle bir sorun var. Kullanıcının kaydettiği adresi alabilirmiyim?
  • 08-08-2012, 12:27:37
    #7
    FileReference ile alamazsınız. Fakat FileReferenceList ya da öncelikli olarak nativePath kullanabilirsiniz diye düşünüyorum.
  • 08-08-2012, 13:44:20
    #8
    Allah razı olsun hocam gerçekten çok makbule geçti. Hocam size son bir sorum olacak. Bir dosya var mı yok mu diye kontrol etmem gerek ama bir fonksiyon bulamadım. Örn : C:/xml.xml var sa şu işlemler yoksa şu işlemler tarzında bişey olacak. Sadece var mı yok mu kontrol etmem gerek.
  • 08-08-2012, 15:08:48
    #9
    Projenizi Flash Player olarak mı Yoksa AIR olarak mı derliyorsunuz? File.exist methodu var fakat AIR de çalışıyor. Yukarıda FileReference "try-catch" betiğinde catch aynı zamanda dosyanın varolmasınıda yakalar.

    Güvenlik nedeni ile Flash Player'ın local izni pek yok.